diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 9d56eb5..f6c0581 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -10,7 +10,7 @@ jobs: golangci: strategy: matrix: - go-version: [ '1.16','1.17','1.18','1.19','1.20','1.21.4' ] + go-version: [ '1.16','1.17','1.18','1.19','1.20','1.21.4' ] name: golangci-lint runs-on: ubuntu-latest steps: diff --git a/miniprogram/miniprogram.go b/miniprogram/miniprogram.go index f6adaee..2988901 100644 --- a/miniprogram/miniprogram.go +++ b/miniprogram/miniprogram.go @@ -15,6 +15,7 @@ import ( "github.com/silenceper/wechat/v2/miniprogram/order" "github.com/silenceper/wechat/v2/miniprogram/privacy" "github.com/silenceper/wechat/v2/miniprogram/qrcode" + "github.com/silenceper/wechat/v2/miniprogram/redpacketcover" "github.com/silenceper/wechat/v2/miniprogram/riskcontrol" "github.com/silenceper/wechat/v2/miniprogram/security" "github.com/silenceper/wechat/v2/miniprogram/shortlink" @@ -155,3 +156,8 @@ func (miniProgram *MiniProgram) GetShipping() *order.Shipping { func (miniProgram *MiniProgram) GetMiniDrama() *minidrama.MiniDrama { return minidrama.NewMiniDrama(miniProgram.ctx) } + +// GetRedPacketCover 小程序微信红包封面 API +func (miniProgram *MiniProgram) GetRedPacketCover() *redpacketcover.RedPacketCover { + return redpacketcover.NewRedPacketCover(miniProgram.ctx) +} diff --git a/miniprogram/redpacketcover/redpacketcover.go b/miniprogram/redpacketcover/redpacketcover.go new file mode 100644 index 0000000..08e00bf --- /dev/null +++ b/miniprogram/redpacketcover/redpacketcover.go @@ -0,0 +1,59 @@ +package redpacketcover + +import ( + "fmt" + + "github.com/silenceper/wechat/v2/miniprogram/context" + "github.com/silenceper/wechat/v2/util" +) + +const ( + getRedPacketCoverURL = "https://api.weixin.qq.com/redpacketcover/wxapp/cover_url/get_by_token?access_token=%s" +) + +// RedPacketCover struct +type RedPacketCover struct { + *context.Context +} + +// NewRedPacketCover 实例 +func NewRedPacketCover(context *context.Context) *RedPacketCover { + redPacketCover := new(RedPacketCover) + redPacketCover.Context = context + return redPacketCover +} + +// GetRedPacketCoverRequest 获取微信红包封面参数 +type GetRedPacketCoverRequest struct { + // openid 可领取用户的openid + OpenID string `json:"openid"` + // ctoken 在红包封面平台获取发放ctoken(需要指定可以发放的appid) + CToken string `json:"ctoken"` +} + +// GetRedPacketCoverResp 获取微信红包封面 +type GetRedPacketCoverResp struct { + util.CommonError + Data struct { + URL string `json:"url"` + } `json:"data"` // 唯一请求标识 +} + +// GetRedPacketCoverURL 获得指定用户可以领取的红包封面链接。获取参数ctoken参考微信红包封面开放平台 +// 文档地址: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/red-packet-cover/getRedPacketCoverUrl.html +func (cover *RedPacketCover) GetRedPacketCoverURL(coderParams GetRedPacketCoverRequest) (res GetRedPacketCoverResp, err error) { + accessToken, err := cover.GetAccessToken() + if err != nil { + return + } + + uri := fmt.Sprintf(getRedPacketCoverURL, accessToken) + response, err := util.PostJSON(uri, coderParams) + if err != nil { + return + } + + // 使用通用方法返回错误 + err = util.DecodeWithError(response, &res, "GetRedPacketCoverURL") + return +}