diff --git a/miniprogram/miniprogram.go b/miniprogram/miniprogram.go index 028fd1f..9cfd35d 100644 --- a/miniprogram/miniprogram.go +++ b/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) +} diff --git a/miniprogram/subscribe/subscribe.go b/miniprogram/subscribe/subscribe.go new file mode 100644 index 0000000..86b9c26 --- /dev/null +++ b/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") +}