2021-07-06 16:26:50

golang小程序订阅消息发送

golang小程序订阅消息发送

步骤

  • 选择或者添加消息模板
  • 获取小程序 token
  • 调用api(目标用户openid,内容等)

示例代码

package wechat import ( "bytes" "encoding/json" "errors" "net/http" "time" ) const tmplId = "订阅模板id" type MpgMsg struct { Touser string `json:"touser"` //接收者(用户)的 openid TemplateID string `json:"template_id"` //所需下发的订阅模板id Page string `json:"page"` //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。 MiniprogramState string `json:"miniprogram_state"` //跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版 Lang string `json:"lang"` //进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN Data struct { Thing1 struct { Value string `json:"value"` } `json:"thing1"` Name2 struct { Value string `json:"value"` } `json:"name2"` Date3 struct { Value string `json:"value"` } `json:"date3"` } `json:"data"` //模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } } } func MpgSendMsg(token string, openId string, thing string, name string, date string) error { // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html#method-http mod := MpgMsg{ Touser: openId, TemplateID: tmplId, Page: "访问路径", MiniprogramState: "formal", } mod.Data.Thing1.Value = thing mod.Data.Name2.Value = name mod.Data.Date3.Value = date bytesData, err := json.Marshal(mod) if err != nil { return err } body := bytes.NewReader(bytesData) client := http.Client{Timeout: 30 * time.Second} request, err := http.NewRequest("POST", "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+token, body) if err != nil { return err } request.Header.Set("Content-Type", "application/json;charset=UTF-8") resp, err := client.Do(request) if err != nil { return err } defer resp.Body.Close() decoder := json.NewDecoder(resp.Body) reply := &MpgMsgReply{} err = decoder.Decode(reply) if err != nil { return err } err = reply.Stat() if err != nil { return err } return nil } // mpg MpgMsgReply type MpgMsgReply struct { Openid string `json:"openid"` SessionKey string `json:"session_key"` Unioid string `json:"unioid"` Errcode int `json:"errcode"` Errmsg string `json:"errmsg"` } // Stat 统一返回状态 func (mpg *MpgMsgReply) Stat() error { switch mpg.Errcode { case 0: return nil case -1: return errors.New("微信系统繁忙") case 40003: return errors.New("touser字段openid为空或者不正确") case 40037: return errors.New("订阅模板id为空不正确") case 43101: return errors.New("用户拒绝接受消息,如果用户之前曾经订阅过,则表示用户取消了订阅关系") case 47003: return errors.New("模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错") case 41030: return errors.New("page路径不正确,需要保证在现网版本小程序中存在,与app.json保持一致") default: return errors.New(mpg.Errmsg) } }

本文链接:https://blog.zxysilent.com/post/golang-mpg-message.html

-- EOF --

Comments