From 70dd78dd4b792a763dde3d331803542ac83bb900 Mon Sep 17 00:00:00 2001 From: ren-jimmy <690415316@qq.com> Date: Thu, 28 Dec 2023 11:49:51 +0800 Subject: [PATCH 1/4] =?UTF-8?q?ADD=20=E8=8E=B7=E5=8F=96=E7=BA=A2=E5=8C=85?= =?UTF-8?q?=E5=B0=81=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- miniprogram/miniprogram.go | 6 ++ miniprogram/redpacketcover/redpacketcover.go | 69 ++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 miniprogram/redpacketcover/redpacketcover.go 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..6fb1c8d --- /dev/null +++ b/miniprogram/redpacketcover/redpacketcover.go @@ -0,0 +1,69 @@ +package redpacketcover + +import ( + "encoding/json" + "fmt" + "strings" + + "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 +} + +// CoverParma 小程序码参数 +type CoverParma struct { + // openid 可领取用户的openid + OpenID string `json:"openid"` + // ctoken 在红包封面平台获取发放ctoken(需要指定可以发放的appid) + CToken string `json:"ctoken"` +} + +// fetchCode 请求并返回二维码二进制数据 +func (qrCode *RedPacketCover) fetchCode(urlStr string, body interface{}) (response []byte, err error) { + var accessToken string + accessToken, err = qrCode.GetAccessToken() + if err != nil { + return + } + + urlStr = fmt.Sprintf(urlStr, accessToken) + var contentType string + response, contentType, err = util.PostJSONWithRespContentType(urlStr, body) + if err != nil { + return + } + if strings.HasPrefix(contentType, "application/json") { + // 返回错误信息 + var result util.CommonError + err = json.Unmarshal(response, &result) + if err == nil && result.ErrCode != 0 { + err = fmt.Errorf("error : errcode=%v , errmsg=%v", result.ErrCode, result.ErrMsg) + return nil, err + } + + return response, nil + } + err = fmt.Errorf("error : unknown response content type - %v", contentType) + return nil, err +} + +// GetRedPacketCoverUrl 获得指定用户可以领取的红包封面链接。获取参数ctoken参考微信红包封面开放平台 +// 文档地址: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/red-packet-cover/getRedPacketCoverUrl.html +func (qrCode *RedPacketCover) GetRedPacketCoverUrl(coderParams CoverParma) (response []byte, err error) { + return qrCode.fetchCode(getRedPacketCoverUrl, coderParams) +} From bce303e3bd281afd1301f89eb1cf289b31d7ff93 Mon Sep 17 00:00:00 2001 From: ren-jimmy <690415316@qq.com> Date: Thu, 28 Dec 2023 14:20:37 +0800 Subject: [PATCH 2/4] Update redpacketcover.go --- miniprogram/redpacketcover/redpacketcover.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/miniprogram/redpacketcover/redpacketcover.go b/miniprogram/redpacketcover/redpacketcover.go index 6fb1c8d..e586db4 100644 --- a/miniprogram/redpacketcover/redpacketcover.go +++ b/miniprogram/redpacketcover/redpacketcover.go @@ -10,7 +10,7 @@ import ( ) const ( - getRedPacketCoverUrl = "https://api.weixin.qq.com/redpacketcover/wxapp/cover_url/get_by_token?access_token=%s" + getRedPacketCoverURL = "https://api.weixin.qq.com/redpacketcover/wxapp/cover_url/get_by_token?access_token=%s" ) // RedPacketCover struct @@ -62,8 +62,8 @@ func (qrCode *RedPacketCover) fetchCode(urlStr string, body interface{}) (respon return nil, err } -// GetRedPacketCoverUrl 获得指定用户可以领取的红包封面链接。获取参数ctoken参考微信红包封面开放平台 +// GetRedPacketCoverURL 获得指定用户可以领取的红包封面链接。获取参数ctoken参考微信红包封面开放平台 // 文档地址: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/red-packet-cover/getRedPacketCoverUrl.html -func (qrCode *RedPacketCover) GetRedPacketCoverUrl(coderParams CoverParma) (response []byte, err error) { - return qrCode.fetchCode(getRedPacketCoverUrl, coderParams) +func (qrCode *RedPacketCover) GetRedPacketCoverURL(coderParams CoverParma) (response []byte, err error) { + return qrCode.fetchCode(getRedPacketCoverURL, coderParams) } From 8985807e75b1d4e6ba6a7bf6610b3bf628704a0b Mon Sep 17 00:00:00 2001 From: ren-jimmy <690415316@qq.com> Date: Thu, 28 Dec 2023 16:11:33 +0800 Subject: [PATCH 3/4] =?UTF-8?q?MOD=20=E4=BF=AE=E6=94=B9=E4=B8=BA=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E9=94=99=E8=AF=AF=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- miniprogram/redpacketcover/redpacketcover.go | 56 ++++++++------------ 1 file changed, 23 insertions(+), 33 deletions(-) diff --git a/miniprogram/redpacketcover/redpacketcover.go b/miniprogram/redpacketcover/redpacketcover.go index e586db4..08e00bf 100644 --- a/miniprogram/redpacketcover/redpacketcover.go +++ b/miniprogram/redpacketcover/redpacketcover.go @@ -1,9 +1,7 @@ package redpacketcover import ( - "encoding/json" "fmt" - "strings" "github.com/silenceper/wechat/v2/miniprogram/context" "github.com/silenceper/wechat/v2/util" @@ -25,45 +23,37 @@ func NewRedPacketCover(context *context.Context) *RedPacketCover { return redPacketCover } -// CoverParma 小程序码参数 -type CoverParma struct { +// GetRedPacketCoverRequest 获取微信红包封面参数 +type GetRedPacketCoverRequest struct { // openid 可领取用户的openid OpenID string `json:"openid"` // ctoken 在红包封面平台获取发放ctoken(需要指定可以发放的appid) CToken string `json:"ctoken"` } -// fetchCode 请求并返回二维码二进制数据 -func (qrCode *RedPacketCover) fetchCode(urlStr string, body interface{}) (response []byte, err error) { - var accessToken string - accessToken, err = qrCode.GetAccessToken() - if err != nil { - return - } - - urlStr = fmt.Sprintf(urlStr, accessToken) - var contentType string - response, contentType, err = util.PostJSONWithRespContentType(urlStr, body) - if err != nil { - return - } - if strings.HasPrefix(contentType, "application/json") { - // 返回错误信息 - var result util.CommonError - err = json.Unmarshal(response, &result) - if err == nil && result.ErrCode != 0 { - err = fmt.Errorf("error : errcode=%v , errmsg=%v", result.ErrCode, result.ErrMsg) - return nil, err - } - - return response, nil - } - err = fmt.Errorf("error : unknown response content type - %v", contentType) - return nil, err +// 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 (qrCode *RedPacketCover) GetRedPacketCoverURL(coderParams CoverParma) (response []byte, err error) { - return qrCode.fetchCode(getRedPacketCoverURL, coderParams) +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 } From 1e4f73ef0293b10a2f9a08b83f4a6702c1838b6e Mon Sep 17 00:00:00 2001 From: ren-jimmy <690415316@qq.com> Date: Thu, 28 Dec 2023 17:33:36 +0800 Subject: [PATCH 4/4] Update go.yml --- .github/workflows/go.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index c66040b..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' ] + go-version: [ '1.16','1.17','1.18','1.19','1.20','1.21.4' ] name: golangci-lint runs-on: ubuntu-latest steps: