您的位置 首页 php

微信公众号订阅通知的实现步骤

1.获取jssdk

 public  Function  test( request  $request)
{
  $app = MYFunction::openPlatform();
  $app->jssdk->setUrl('#39;);
  $jssdk = $app->jssdk->buildConfig(array(),false,false,false,array('wx-open-subscribe'));
  return response()->json(['code' => '1','data'=>['jssdk'=>$jssdk]]);
}  

需要注意的是,调用jssdk时,需要设置JS安全域名及1.6版本以上

2.前端js

 < script  src="#34;%20type="text/javascript"  charset ="utf-8"></script>
<script type="text/javascript" charset="utf-8">

    $(function(){
        layer.open({type: 3});
        $. ajax ({
            url: 'api/test',
            success : function(data){
                layer.closeAll();
                wx.config(data.data.jssdk);
            },
        });
    });

</script>

<wx-open-subscribe template="Yi5YC-OLTWfDdvNS9aipJEHdFWfqDER_vlcmOFcK2B0" id="subscribe-btn">
    <template slot="style">
    <style>
      .subscribe-btn {
        color: #fff;
        background-color: #07c160;
      }
    </style>
    </template>
    <template>
        <button class="subscribe-btn">一次性模版消息订阅</button>
    </template>
</wx-open-subscribe>
<script>

var subTemplateId = new Array();
subTemplateId[0] = 'Yi5YC-OLTWfDdvNS9aipJEHdFWfqDER_vlcmOFcK2B0';
var btn = document.getElementById('subscribe-btn');
btn.addEventListener('success', function (e) {
    console.log('success', e.detail);

    let attend = false;
    let subscribeDetails = JSON.parse(e.detail.subscribeDetails); // 全部的模板
    for(let i in subTemplateId) {
        let subKey = subscribeDetails[subTemplateId[i]]; // 获取每个模板的状态
        let status = JSON.parse(subKey);
        let type = false;
        switch(status.status){
            case "reject":
                 alert (`用户拒绝订阅全部消息`);
                type = false;
                break;
            case "cancel":
                alert(`用户取消订阅全部消息`);
                type = false;
                break;
            case "filter":
                alert(`第${i}条消息应该标题同名被后台过滤`);
                type = false;
                break;
            default:
                type = true;
                break;
        };
        if(!type) { // 如果其中有一个模板没有订阅,则全部不通过过
            attend = false;
            break;
        } else {
            attend = true;
        };
    };
    if(!attend) {
        alert("订阅消息才能参与")
        console.log("订阅消息才能参与")
        return
    };
    alert("参与成功")
    console.log("参与成功")

});
btn.addEventListener('error',function (e) {
    console.log('fail', e.detail);
    alert('订阅失败');
});
</script>  

通常情况下,需要用户订阅的可能不只一个模板,这里使用了多模板进行演示,会有更好的用户体验。

3.消息推送中获取用户允许事件

报文 格式如下:

 {"ToUserName":"gh_f8259559aa59","FromUserName":"oKKb00xTOZZF9Te9MhRXzktcyBA0","CreateTime":"1619503336"," Msg Type":"event","Event":"subscribe_msg_popup_event","SubscribeMsgPopupEvent":{"List":{"TemplateId":"Yi5YC-OLTWfDdvNS9aipJEHdFWfqDER_vlcmOFcK2B0","SubscribeStatusString":"accept","PopupScene":"1"}}}  

这里要特别注意一下,本人写示例时跳过的坑,如果订阅通知使用开发平台进行开发,一定要去开放平台先选择订阅通知权限(后增加的功能,默认不选),之后需要已授权的公众号重新更新权限集,否则无法获得报文。

4.发送订阅通知

 public function send(Request $request)
{
  $app = MYFunction::openPlatform();
  // easywechat目前不支持订阅通知,这个地方是我修改过的
  $result = $app->template_message->sendSubscription([
    'touser' => 'oKKb00xTOZZF9Te9MhRXzktcyBA0',
    'template_id' => 'Yi5YC-OLTWfDdvNS9aipJEHdFWfqDER_vlcmOFcK2B0',
    'page' => 'blog.lingj.net',
    'data' => [
      'thing1' => '测试订阅通知',
      'thing2' => '自动',
      'time4' => '2019年8月8日'
    ],
  ]);
}  

到此结束。

功能实现起来并不难,需要细心一些,多调试。

更多微信开发交流请留言或私信。

文章来源:智云一二三科技

文章标题:微信公众号订阅通知的实现步骤

文章地址:https://www.zhihuclub.com/152413.shtml

关于作者: 智云科技

热门文章

网站地图