I'm Sham
一个在通往码农道路上走走停停的行政文员

小程序推送订阅消息

最近Sham才知道小程序将停止使用模板消息,改为更人性化的订阅消息,虽然后知后觉,但是还不晚,于是马上查文档,试代码。

其实老实说,官方的文档我是看的一知半解,好在前面有用过模板消息,看了官方说明之后,发现其实和模板消息差不多,于是赶紧着手实验,最后成功了,特此记录。

首先是小程序端,授权需要通过 bindtap 事件才可以

<!--wxml部分-->
<button bindtap='allownotes'>获取订阅消息</button>

//js部分
allownotes:function(e){
    wx.requestSubscribeMessage({
      tmplIds: ["订阅消息模板id"],  //这里记得修改,还有下面的,多个id用,分隔
      success: (res) => {
        if (res['订阅消息模板id同上'] === 'accept') {
          wx.showToast({
            title: '订阅OK!',
            duration: 1000,
            success(data) {
              //成功
            }
          })
        }
      },
      fail(err) {
        //失败
        console.error(err);
      }
    })
  },

用户点击button之后,就会弹出授权窗口,用户如果授权,就可以实时第二步了,这里放的是PHP后端的

<?php
  function returnAsskey()
{
    //需要修改小程序appid及secret
    $appid='你的appid';
    $secret='你的secret';
    $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret;   
    $ass_key = curl_get($url);
    $a1 = $ass_key->access_token;
    return $a1;
}
temMsg();
function temMsg()
{
    $page = '/pages/index/index';
    $openid = $_GET['openid'];
    if(!$openid)die('failed!');
    $temid = '你的订阅模板id';  //此处要修改
    $key1 = '行政部';  //发送的消息内容,自己定义
    $key2 = '2019年12月20日';  //发送的消息内容,自己定义
    $key3 = '2020年新春晚会报名开始啦';  //发送的消息内容,自己定义
    $key4 = '2019年12月30日';  //发送的消息内容,自己定义
    $access_token = returnAssKey();
    $url = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token='.$access_token;
    $data = array(    //这里一定要按照微信给的格式
        "touser"=>$openid,
        "template_id"=>$temid,
        "page"=>$page,
        "data"=>array(
            "thing1"=>array(  //这里的thing1和后面的data2等,都是对应订阅消息模板中,请自行修改
                "value"=>$key1,
                "color"=>"#173177"
            ),
            "date2"=>array(
                "value"=>$key2,
                "color"=>"#173177"
            ),
            "thing6"=>array(
                "value"=>$key3,
                "color"=>"#173177"
            ),
            "date8"=>array(
                "value"=>$key4,
                "color"=>"#173177"
            )
        ),
      //需要进行加大的消息  "emphasis_keyword"=>"keyword1.DATA",
    );
    $res = postCurl($url,$data,'json');//将data数组转换为json数据
    if($res){
        echo json_encode(array('state'=>4,'msg'=>$res));
    }else{
        echo json_encode(array('state'=>5,'msg'=>$res));
    }
  
}

function curl_get($url) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($curl);
    $err = curl_error($curl);
    curl_close($curl);
    return json_decode($data);//对数据进行json解码
}
function postCurl($url,$data,$type)
{
    if($type == 'json'){
        $data = json_encode($data);//对数组进行json编码
        $header= array("Content-type: application/json;charset=UTF-8","Accept: application/json","Cache-Control: no-cache", "Pragma: no-cache");
    }
    $curl = curl_init();
    curl_setopt($curl,CURLOPT_URL,$url);
    curl_setopt($curl,CURLOPT_POST,1);
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);
    if(!empty($data)){
        curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
    }
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($curl,CURLOPT_HTTPHEADER,$header);
    $res = curl_exec($curl);
    if(curl_errno($curl)){
        echo 'Error+'.curl_error($curl);
    }
    curl_close($curl);
    return $res;
}
?>

上述的thing1等,可以在对应的模板详情中找到,如图

最后,就是在需要推送消息的时候,访问这个php代码文件即可,记得将openid传给后端,不然它也不知道该退给谁。

如果是要批量推送,应该只需要将openid合并成数组,然后循环执行就行了,sham还没有试,等后续正式使用的时候再实验吧。

总结下:订阅消息不管是对开发者还是用户都更灵活,开发者不用去考虑时效性和次数,用户也能自助选择是否接受,sham个人感觉不错。

赞(0) 赏杯咖啡!
未经允许不得转载:Sham@双目瞿 » 小程序推送订阅消息

评论 2

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #0

    在订阅消息-公共模板库 里面一堆的模板,请问 行政服务小程序里面你选用的是哪些模板呢?

    樱花雨4年前 (2020-09-15)回复
    • 这个根据你自己需求来吧,我用的“反馈回复通知”,“新工单提醒”,”公司公告通知”,“食堂菜单更新通知”,还有一些,只要小程序端和后端对应上就行了

      Sham4年前 (2020-09-15)回复

如果你觉得文章好,请赏1杯速溶咖啡给Sham吧!

微信扫一扫打赏