小程序关联服务号推送模板消息

记录一下小程序关联服务号的消息推送功能。
准备工作:
1、获取小程序的appid与appsecret(小程序后台获取)
2、获取服务号的appid与appsecret(服务号后台获取)
3、小程序与服务号绑定在同一个微信开放平台
注意:小程序、服务号、微信开放平台都要认证!!!都要认证!!!都要认证!!!
接下来进入正题。
第一步:获取服务号的access_token
直接通过官方给的接口获取。这里有两个参数,都可以直接获取到

//接口地址换成自己服务号appid和secret
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=secret,

第二步:获取已关注服务号的所有用户的openid
还是通过官方提供的网址获取openid,这里需要一个参数access_token,已从上一步获取到了

getServiceMessage: (req, res, next) => {
  const access_token = req.query.access_token;
  let url = `https://api.weixin.qq.com/cgi-bin/user/get?access_token=${access_token}`;
  request.get(url, function (error, response, body) {
    let data = JSON.parse(body);
    if (data != null) {
      res.send(data);
    }
    else {
      res.send(error);
    }
  })
},

第三步:获取已关注用户的用户信息
这一步可获取用户的详细信息,包括昵称、头像、地理位置、unionid等。根据官方网址需要两个参数access_token与openid通过上面两部均已取得。这里后台可以生成一张表用于存储这些数据。

getServiceAll: (req, res, next) => {
  const access_token = req.query.access_token;
  const openid = req.query.openid;
  let url = `https://api.weixin.qq.com/cgi-bin/user/info?access_token=${access_token}&openid=${openid}&lang=zh_CN`;
  request.get(url, function (error, response, body) {
    let data = JSON.parse(body);
    if (data != null) {
      res.send(data);
    }
    else {
      res.send(error);
    }
  })
},

第四步:小程序登录时获取用户的unionid
(1)用户登录小程序时,通过wx.login()获取code
(2)通过微信官方网址获取unionid,需要的参数为code、appid、appsecret

 getUserMessage: (req, res, next) => {
    const code = req.query.code;
    const appid = '';//自己小程序的appid(可以写死)
    const secret = '';//自己小程序的secret(可以写死)
    let url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + secret + "&js_code=" + code +"&grant_type=authorization_code";
    request.get(url, function (error, response, body) {
      let data = JSON.parse(body);
      if (data != null) {
        res.send(data);
      }
      else {
        res.send(error);
      }
    })
  },

第五步:服务号的模板消息推送
(1)当服务号与小程序绑定在同一个开放平台时,他们的unionid是一样的,所以我们可以通过unionid这个中间量来进行数据的查找
(2)通过第四步获取的unionid,我们可以查找到当前登录小程序的用户他的服务号的openid。
(3)需要的两个参数都获取到了,我们就可以推送消息模板啦,接下来按照官方的教程操作就行了。
(4)如果想要一次推送给多人可以把接收人的openid存到一个数组中,然后加个循环就行了。

serviceMessage: (req,res,next) =>{
    let access_token = req.query.access_token;//获取access_token
    const openId = "";//服务号用户的openid
    let url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=' + access_token;
    let data = {
      "touser": openId,
      "template_id":"wPndNIsGGgonmz4MQRUVykhbuBUioX2RDH1AhLtz30k", //消息模板的id
      // "url":"http://weixin.qq.com/download",  
      "miniprogram":{
        "appid":"wx07d22155db47b80a", //小程序的appid
        // "pagepath":"index?foo=bar" //需跳转到小程序的页面
      },          
      "data":{
              "first": {
                  "value":"您收到新的通知",
                  "color":"#173177"
              },
              "keyword1":{
                  "value":"采购部",
                  "color":"#173177"
              },
              "keyword2": {
                  "value":"A型号玉米",
                  "color":"#173177"
              },
              "remark":{
                  "value":"期待您的参与!",
                  "color":"#173177"
              }
      }
    }
    httprequest(url,data);
    function httprequest(url,data){
      request({
        url: url,
        method: "POST",
        json: true,
        headers:{
          "content-type": "application/json",
        },
        body: data
        },function(error,response,body){
          if (!error && response.statusCode == 200) {
            res.send(resultJson(body));
            //console.log(body) // 请求成功的处理逻辑
          }
      })
    }
  },

总结:用户必须关注服务号,否则不发收到推送消息。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容