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  }