说明:该接口用于对小程序用户发送服务通知,效果如下图
流程说明:
0.先配置消息模板,在[微信公众平台(mp.weixin.qq.com)-功能-订阅消息]中配置
1.小程序端对用户唤起消息订阅,用户选择接收消息的选项(模板);
2.后端在需要的时候往用户接受过的模板进行发送服务通知;
小程序端代码:
接口文档:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeMessage.html
//小程序的html部分:index.wxml
<button bindtap="issue_subscribe_request" style=""> 唤起订阅消息 </button>
//小程序的js部分:index.js
//发起订阅请求
issue_subscribe_request(e){
wx.requestSubscribeMessage({
tmplIds: [
'qIpFKwcL_O12LLkmI6yps1o9ifW_4mv7AZUWdkzOlkk','mbdr6nqD0VRwDf69QEmYrlNsjgy4HIMuriEgYpUeHdk'],
success (res) {
console.log(res)
}
})
}
效果如下:
注:1.用户没有打勾的选项(模板),服务端无法向该用户发送该选项的消息;
2.点击下方的“总是保持以上选择,不再询问”后,此用户无法再唤起该弹窗,并且
①用户全部都打勾选项并选总是,则服务端可以一直给该用户发消息;
②用户没有打勾的选项并选总是,则再也无法给该用户发送相关的服务通知;
PHP服务端代码:
接口文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
/**
* @desc 该方法向用户发送评论通知
* @param $openid 接收消息用户的openid
* @param $arr 消息内容,根据模板需要进行配置
*/
public function send_subscribe_message($openid,$arr){
//小程序后台配置的模板id
$template_id = "qIpFKwcL_O12LLkmI6yps1o9ifW_4mv7AZUWdkzOlkk";
//消息发送的格式
$template = "{
\"touser\": \"{$openid}\",
\"template_id\": \"{$template_id}\",
\"page\": \"index\",
\"miniprogram_state\":\"developer\",
\"lang\":\"zh_CN\",
\"data\": {
\"thing2\": {
\"value\": \"{$arr['content']}\"
},
\"time3\": {
\"value\": \"{$arr['create_time']}\"
},
\"thing5\": {
\"value\": \"{$arr['nickname']}\"
} ,
\"thing9\": {
\"value\": \"{$arr['remark']}\"
}
}
}";
//获取access_token
$access_token = $this->get_access_token();
//使用curl进行请求
$url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={$access_token}";
//$this->curl_post($url,$template)
$res = $this->curl_post($url,$template);
return $res;
//成功:"{"errcode":0,"errmsg":"ok","msgid":1822356413101195268}"
//失败:"{"errcode":43101,"errmsg":"user refuse to accept the msg rid: 6073f992-2337e5cf-0dee24c3"}" //用户没有订阅消息时的错误提示
}
//curl请求的方法
private function curl_post($url,$data=array()){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// POST数据
curl_setopt($ch, CURLOPT_POST, 1);
// 把post的变量加上
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
/**
* @desc 获取access_token
*/
private function get_access_token(){
$appid = '小程序的appid';
$secretkey = '小程序的key';
$url = "https://api.weixin.qq.com/cgi-bin/token?
grant_type=client_credential&appid=".$appid."&secret=".$secretkey ;
$res = json_decode(file_get_contents($url),true);//获取微信返回的access_token
$access_token = $res['access_token'];
//获取到access_token应该保存起来,一般7000秒内不会过期
}