zoukankan      html  css  js  c++  java
  • 3、小程序消息推送

    一、配置消息模板

     然后配置

     宝塔创建站点index.php

    <?php  
    //1. 将timestamp , nonce , token 按照字典排序  
    $timestamp = $_GET['timestamp'];  
    $nonce = $_GET['nonce'];  
    $token = "你自定义的Token值";  
    $signature = $_GET['signature'];  
    $array = array($timestamp,$nonce,$token);  
    sort($array);  
      
    //2.将排序后的三个参数拼接后用sha1加密  
    $tmpstr = implode('',$array);  
    $tmpstr = sha1($tmpstr);  
      
    //3. 将加密后的字符串与 signature 进行对比, 判断该请求是否来自微信  
    if($tmpstr == $signature)  
    {  
        echo $_GET['echostr'];  
        exit;  
    }  

    实践

     返回设置首页可看到

     官方要 取消消息模板,使用订阅消息

     点击详情可以查看模板参数

     或者自定义模板

     二、模板实现

    1、调起授权

      <button bindtap="btnClick">点击调起订阅消息</button>

    js如下

      btnClick() {
    
        wx.requestSubscribeMessage({
          tmplIds: ["IJhwUdQzDAXCAdE5cE0VkZYf05G70--FsEqKSf-swS4"], // 此处可填写多个模板 ID,但低版本微信不兼容只能授权一个
          success: (res) => { //成功回调
            console.log('已授权接收订阅消息', res)
            if (res['IJhwUdQzDAXCAdE5cE0VkZYf05G70--FsEqKSf-swS4'] == 'accept') { //accept--用户同意 
            }
          },
          fail(err) {
            console.log(err)
          }
        })
    
      },

    实践遇到几点注意:

    1、吊不起来 我加了 fail 去找原因

    2、20001,No template data return, verify the template id exist", errCode: NaN}, 你开发的小程序appId和申请模版ID的appId是一样的吗?这个要确定下 必须一致,试了几次模板是没错的

     2、发送消息

     代码

      <button bindtap="btnClick2">点击发送订阅消息</button>

    js如下

      btnClick2() {
    
        wx.request({
          url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx3a67e41d312efe09&secret=3deee1c88d2e3ae6bf584d64945ff367',
          data: {},
          success: function(res) {
            var openid = wx.getStorageSync("openid") //取前一步存起来的openid
            console.log("获取openid",openid);
            // 调用下发接口
            wx.request({
              url: 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=' + res.data.access_token, //获取的access_token
              method: "POST",
              header: {
                'content-type': 'application/json' // 默认值
              },
              data: JSON.stringify({
                touser: openid, //当前用户的openid
                template_id: "IJhwUdQzDAXCAdE5cE0VkZYf05G70--FsEqKSf-swS4", //需要下发的模板ID,如模板不多可让后台直接配置写死,多的话就通过微信获取模板列表接口查询模板
                //page: "pages/garden/garden", //点击小程序订阅消息跳转的页面,可携带参数
                data: {
                  "name1": { //这个key值就是上面提到的关键词,在后台对应的模板详情里可以看到,等后台-->点订阅消息-->我的模板(没有的话先去公共模板库选一个)-->点击详情-->右边详细内容里就是对应的key了
                    "value": '张三' //这个值是下发给用户的信息
                  },
                  "date2": {
                    "value": '2020-01-08'
                  },
                  "thing4": {
                    "value": '感冒了'
                  },
                  "time3": {
                    "value": '19:52'
                  }
                }
              }),
              success: res => {
                console.log(res)
                wx.showToast({
                  title: '下发成功',
                })
                // 这里可以写自己的逻辑
              }
            })
          }
        })
    
      },

     这是一次性订阅,每次调起授权一次,只能发一次,除非你授权多次,才可以

     所以都会处理把wx.requestSubscribeMessage res下放入发送方法下去执行

    关于page 是内官网只允许内部页面,只能单独新建页面,然后内嵌别的页面了

  • 相关阅读:
    关于 Bellman-Ford 与 Floyd 算法的一点感想
    中途相遇法 解决 超大背包问题 pack
    具体一些的博弈论 sqrstone
    SG函数学习总结
    mc
    string
    积木大赛
    pta l3-20(至多删三个字符)
    pta l3-7(天梯地图)
    ucore-lab1-练习2report
  • 原文地址:https://www.cnblogs.com/fger/p/12799613.html
Copyright © 2011-2022 走看看