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日'
],
]);
}
到此结束。
功能实现起来并不难,需要细心一些,多调试。
更多微信开发交流请留言或私信。