Преглед изворни кода

添加小程序发送订阅消息 (#267)

silenceper пре 6 година
родитељ
комит
3a1221e7ed
2 измењених фајлова са 59 додато и 1 уклоњено
  1. 7 1
      miniprogram/miniprogram.go
  2. 52 0
      miniprogram/subscribe/subscribe.go

+ 7 - 1
miniprogram/miniprogram.go

@@ -4,10 +4,11 @@ import (
 	"github.com/silenceper/wechat/v2/credential"
 	"github.com/silenceper/wechat/v2/miniprogram/analysis"
 	"github.com/silenceper/wechat/v2/miniprogram/auth"
-	"github.com/silenceper/wechat/v2/miniprogram/encryptor"
 	"github.com/silenceper/wechat/v2/miniprogram/config"
 	"github.com/silenceper/wechat/v2/miniprogram/context"
+	"github.com/silenceper/wechat/v2/miniprogram/encryptor"
 	"github.com/silenceper/wechat/v2/miniprogram/qrcode"
+	"github.com/silenceper/wechat/v2/miniprogram/subscribe"
 	"github.com/silenceper/wechat/v2/miniprogram/tcb"
 )
 
@@ -60,3 +61,8 @@ func (miniProgram *MiniProgram) GetQRCode() *qrcode.QRCode {
 func (miniProgram *MiniProgram) GetTcb() *tcb.Tcb {
 	return tcb.NewTcb(miniProgram.ctx)
 }
+
+//GetSubscribe 小程序订阅消息
+func (miniProgram *MiniProgram) GetSubscribe() *subscribe.Subscribe {
+	return subscribe.NewSubscribe(miniProgram.ctx)
+}

+ 52 - 0
miniprogram/subscribe/subscribe.go

@@ -0,0 +1,52 @@
+package subscribe
+
+import (
+	"fmt"
+
+	"github.com/silenceper/wechat/v2/miniprogram/context"
+	"github.com/silenceper/wechat/v2/util"
+)
+
+const (
+	//发送订阅消息
+	//https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
+	subscribeSendURL = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send"
+)
+
+// Subscribe 订阅消息
+type Subscribe struct {
+	*context.Context
+}
+
+// NewSubscribe 实例化
+func NewSubscribe(ctx *context.Context) *Subscribe {
+	return &Subscribe{Context: ctx}
+}
+
+// Message 订阅消息请求参数
+type Message struct {
+	ToUser           string               `json:"touser"`            //必选,接收者(用户)的 openid
+	TemplateID       string               `json:"template_id"`       //必选,所需下发的订阅模板id
+	Page             string               `json:"page"`              //可选,点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
+	Data             map[string]*DataItem `json:"data"`              //必选, 模板内容
+	MiniprogramState string               `json:"miniprogram_state"` //可选,跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
+	Lang             string               `json:"lang"`              //入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN
+}
+
+//DataItem 模版内某个 .DATA 的值
+type DataItem struct {
+	Value string `json:"value"`
+}
+
+// Send 发送订阅消息
+func (s *Subscribe) Send(msg *Message) (err error) {
+	var accessToken string
+	accessToken, err = s.GetAccessToken()
+	if err != nil {
+		return
+	}
+	uri := fmt.Sprintf("%s?access_token=%s", subscribeSendURL, accessToken)
+	response, err := util.PostJSON(uri, msg)
+
+	return util.DecodeWithCommonError(response, "Send")
+}