github.com/chanxuehong/wechat@v0.0.0-20230222024006-36f0325263cd/mp/card/card.go (about) 1 package card 2 3 import ( 4 "github.com/chanxuehong/wechat/mp/core" 5 ) 6 7 // 创建卡券. 8 func Create(clt *core.Client, card *Card) (cardId string, err error) { 9 request := struct { 10 Card *Card `json:"card,omitempty"` 11 }{ 12 Card: card, 13 } 14 15 var result struct { 16 core.Error 17 CardId string `json:"card_id"` 18 } 19 20 incompleteURL := "https://api.weixin.qq.com/card/create?access_token=" 21 if err = clt.PostJSON(incompleteURL, &request, &result); err != nil { 22 return 23 } 24 25 if result.ErrCode != core.ErrCodeOK { 26 err = &result.Error 27 return 28 } 29 cardId = result.CardId 30 return 31 } 32 33 // 查看卡券详情. 34 func Get(clt *core.Client, cardId string) (card *Card, err error) { 35 request := struct { 36 CardId string `json:"card_id"` 37 }{ 38 CardId: cardId, 39 } 40 41 var result struct { 42 core.Error 43 Card `json:"card"` 44 } 45 46 incompleteURL := "https://api.weixin.qq.com/card/get?access_token=" 47 if err = clt.PostJSON(incompleteURL, &request, &result); err != nil { 48 return 49 } 50 51 if result.ErrCode != core.ErrCodeOK { 52 err = &result.Error 53 return 54 } 55 card = &result.Card 56 return 57 } 58 59 type BatchGetQuery struct { 60 Offset int `json:"offset"` // 查询卡列表的起始偏移量,从0开始,即offset: 5是指从从列表里的第六个开始读取。 61 Count int `json:"count"` // 需要查询的卡片的数量(数量最大50)。 62 StatusList []string `json:"status_list,omitempty"` // 支持开发者拉出指定状态的卡券列表,例:仅拉出通过审核的卡券。 63 } 64 65 type BatchGetResult struct { 66 TotalNum int `json:"total_num"` 67 ItemNum int `json:"item_num"` 68 CardIdList []string `json:"card_id_list"` 69 } 70 71 // 批量查询卡列表. 72 func BatchGet(clt *core.Client, query *BatchGetQuery) (rslt *BatchGetResult, err error) { 73 var result struct { 74 core.Error 75 BatchGetResult 76 } 77 78 incompleteURL := "https://api.weixin.qq.com/card/batchget?access_token=" 79 if err = clt.PostJSON(incompleteURL, query, &result); err != nil { 80 return 81 } 82 83 if result.ErrCode != core.ErrCodeOK { 84 err = &result.Error 85 return 86 } 87 result.BatchGetResult.ItemNum = len(result.BatchGetResult.CardIdList) 88 rslt = &result.BatchGetResult 89 return 90 } 91 92 // 更改卡券信息接口. 93 // 94 // sendCheck: 是否提交审核,false为修改后不会重新提审,true为修改字段后重新提审,该卡券的状态变为审核中。 95 func Update(clt *core.Client, cardId string, card *Card) (sendCheck bool, err error) { 96 request := struct { 97 CardId string `json:"card_id"` 98 *Card 99 }{ 100 CardId: cardId, 101 Card: card, 102 } 103 104 var result struct { 105 core.Error 106 SendCheck bool `json:"send_check"` 107 } 108 109 incompleteURL := "https://api.weixin.qq.com/card/update?access_token=" 110 if err = clt.PostJSON(incompleteURL, &request, &result); err != nil { 111 return 112 } 113 if result.ErrCode != core.ErrCodeOK { 114 err = &result.Error 115 return 116 } 117 sendCheck = result.SendCheck 118 return 119 } 120 121 // 库存修改接口. 122 // cardId: 卡券ID 123 // increaseNum: 增加库存数量, 可以为负数 124 func ModifyStock(clt *core.Client, cardId string, increaseNum int) (err error) { 125 request := struct { 126 CardId string `json:"card_id"` 127 IncreaseStockValue int `json:"increase_stock_value,omitempty"` 128 ReduceStockValue int `json:"reduce_stock_value,omitempty"` 129 }{ 130 CardId: cardId, 131 } 132 switch { 133 case increaseNum > 0: 134 request.IncreaseStockValue = increaseNum 135 case increaseNum < 0: 136 request.ReduceStockValue = -increaseNum 137 default: // increaseNum == 0 138 return 139 } 140 141 var result core.Error 142 143 incompleteURL := "https://api.weixin.qq.com/card/modifystock?access_token=" 144 if err = clt.PostJSON(incompleteURL, &request, &result); err != nil { 145 return 146 } 147 148 if result.ErrCode != core.ErrCodeOK { 149 err = &result 150 return 151 } 152 return 153 } 154 155 // 删除卡券 156 func Delete(clt *core.Client, cardId string) (err error) { 157 request := struct { 158 CardId string `json:"card_id"` 159 }{ 160 CardId: cardId, 161 } 162 163 var result core.Error 164 165 incompleteURL := "https://api.weixin.qq.com/card/delete?access_token=" 166 if err = clt.PostJSON(incompleteURL, &request, &result); err != nil { 167 return 168 } 169 170 if result.ErrCode != core.ErrCodeOK { 171 err = &result 172 return 173 } 174 return 175 }