龙空技术网

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

代码加工厂 104

前言:

如今小伙伴们对“使用ajax实现微信授权”都比较关心,同学们都想要了解一些“使用ajax实现微信授权”的相关文章。那么小编在网摘上网罗了一些有关“使用ajax实现微信授权””的相关文章,希望各位老铁们能喜欢,你们快快来了解一下吧!

关于微信公众号取消模板消息,改为订阅通知的公告这里就不再细说了,关注的朋友去微信官网查看公告即可。本篇主要以PHP+JSS实现订阅通知功能为主。

本例以easywechat的laravel版本5.0为开发用例

1.获取jssdk

public function test(Request $request){  $app = MYFunction::openPlatform();  $app->jssdk->setUrl(';);  $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="; type="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","MsgType":"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日'    ],  ]);}

到此结束。

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

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

标签: #使用ajax实现微信授权