小程序订阅消息
小程序订阅消息接入流程:
(1)小程序申请或选择订阅消息模板.
(2)小程序端获得发送订阅消息权限.
(3)服务端获取将要发送用户的openID.
(4)服务端开发订阅消息模板所需要的的字段函数.
(5)事件触发,服务端发送订阅消息.
综上发现,发送订阅消息在小程序端仅需要获取一个授权即可,剩下的都在服务端进行工作.
贴上代码
小程序端:
.wxml页面
<button bindtap="getQx">获取订阅权限</button> .js页面 getQx(){ wx.requestSubscribeMessage({ tmplIds: ['PMSyKABSggSLuBb7_sfBLC8e2LgCAPjNPOngPJ7Q5W8'],//填写自己的模板ID(在小程序公众平台订阅消息中申请/复制) success(res) { console.log('成功'); } }) }
在此之前需要获取openID具体步骤需要查看之前的教程
http://bk.qsyq.online/?t/1.html
服务器端:
获取access_token存入缓存、数据库或文件中(此地放入了本地txt文件中)
//getAccess.php文件
<?php function getAccessToken($appid,$secret){ $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}"; $res = curl_get($url); $res = json_decode($res,1); $res['time']=time(); $text=json_encode($res); $myfile = fopen("acc.txt", "w") or die("Unable to open file!"); fwrite($myfile, $text); fclose($myfile); return $res['access_token']; }
//sendMg.php文件
<?php include_once 'requestion.php'; include_once 'config.php'; include_once 'getAccess.php'; $filename = "acc.txt"; $handle = fopen($filename,'r'); $contents = fread($handle,filesize($filename)); fclose($handle); $arr=json_decode($contents); if(time()-$arr->time<$arr->expires_in){ echo(sendSubscribeMessage($arr->access_token)); die(); }else{ $access_token = getAccessToken($appid, $appSecret); } //所需字段请在微信小程序订阅消息中查看 function sendSubscribeMessage($access_token) { //请求url $url = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=' . $access_token ; //发送内容 $data = [] ; //接收者(用户)的 openid $data['touser'] = '换成需要发送的openID' ; //所需下发的订阅模板id $data['template_id'] = '换成需要发送的模板id' ; //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。 $data['page'] = 'index/index' ; //模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } } $data['data'] = [ "thing1"=>[ 'value' => '小门神优选' ], "thing2"=>[ 'value' => '签到送好礼' ], "date3"=>[ 'value' => '15:04:00' ], 'thing4'=>[ 'value'=>'恭喜您签到成功,获得10枚门神币' ] ]; //跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版 $data['miniprogram_state'] = 'developer' ;//正式上线请选择formal return curlPost($url,json_encode($data)) ; }
//requestion.php页面(封装了get和post请求)
<?php //发送get请求 function curl_get($url, &$httpCode = 0) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //不做证书校验,部署在linux环境下请改为true curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); $file_contents = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $file_contents; } //发送post请求 function curlPost($url,$data) { $ch = curl_init(); $params[CURLOPT_URL] = $url; //请求url地址 $params[CURLOPT_HEADER] = FALSE; //是否返回响应头信息 $params[CURLOPT_SSL_VERIFYPEER] = false; $params[CURLOPT_SSL_VERIFYHOST] = false; $params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回 $params[CURLOPT_POST] = true; $params[CURLOPT_POSTFIELDS] = $data; curl_setopt_array($ch, $params); //传入curl参数 $content = curl_exec($ch); //执行 curl_close($ch); //关闭连接 return $content; } //config.php页面(配置文件) <?php $appid = 'APPID';//小程序的appid $appSecret = 'SECRET';// 小程序的$appSecret
运行sendMg.php文件你的手机就会收到小程序的服务消息!