版权声明:本文为博主原创文章,如果转载请给出原文链接:http://doofuu.com/article/4156224.html
微信小程序模板消息推送是微信为开发者提供的可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的使用体验。所以这个功能是微信小程序开发中必不可少的功能之一了。这不在跟客户开发小程序中也需要添加这一小程序能力。翻了翻微信小程序开发文档,发现也不复杂。今天天下小雨,不能出去浪。所以借此机会总结下自己实现模板消息推送功能的经验和自己踩过的坑。方便自己以后复习也给碰到问题的朋友一个参考。屁话不多说,先打开微信小程序文档找到模板消息的相关说明!(文档才是最重要的)。
准备工作
步骤一:获取模板 ID
获取模板ID的方式有两种,通过模板消息管理接口获取模板 ID和在微信公众平台手动配置获取模板 ID,我就是在微信公众平台手动配置获取模板 ID的,这种最简单(简单既是好,何必花里胡哨为难自己呢)。添加好适合自己需求的模板就行了。
步骤二:获取发送模板消息的必要参数formId或者prepay_id
formId和prepay_id只要获取一个就可以了,formId是通过页面的 form 组件,设置form组件的属性 report-submit 为 true 时,可以声明为需要发送模板消息,此时点击按钮提交表单可以获取 formId,例如
<form bindsubmit='submitForm' report-submit='true'>
submitForm:function(e){ //获取formid var fromId = e.detail.formId; }
获取到formId后只需要在提交这个表单的时候把formId一起带到后台然后进行使用数据库进行保存就可以了。保存formId时最好把获取时间一起加上,这样可以方便查询已经过了七天失效的formId。
prepay_id是当用户完成支付时可以获取的到,具体看wx.requestPayment(Object object)的文档说明吧。
步骤三:获取小程序AccessToken
access_token 是小程序全局唯一后台接口调用凭据,调用绝大多数后台接口时都需使用。开发者可以通过 https://api.weixin.qq.com/cgi-bin/token接口获取。这个accessToken只有2小时的时效性,每获取一次上次的的accessToken就会失效。文档在这里。
步骤四:都准备好了,可以发送模板消息了
具体代码如下:
class NoticeController extends Controller { public function sendMaster($user){ //小程序后台对应的模板字段要发送的内容,按循序对应 $sendData = [ "keyword1"=>[ "value"=>"校长您好!", "color"=>"#cccccc" ], "keyword2"=>[ "value"=>"你有新的监考信息", "color"=>"#cccccc" ], "keyword3"=>[ "value"=>"收到信息请前往小程序点击确认", "color"=>"#cccccc" ] ]; $appId = "小程序appId"; $appSecret = "小程序secret"; $data = array( "grant_type"=>"client_credential", "appid"=>$appId, "secret"=>$appSecret); $r = $this->http_request("https://api.weixin.qq.com/cgi-bin/token",$data); //返回的是字符串,需要用json_decode转换成数组 $data = json_decode($r,true); $result = json_decode($r,true); $accessToken= $result['access_token']; //ACCESS_TOKEN $this->do_notice($user['form_id'],$user['openid'],$accessToken,$sendData); } public function do_notice($formId,$openid,$accessToken,$sendData){ $data = [ "touser"=>$openid,//用户的openid "template_id"=>"tTP0uvMe2ADAiwpglIYeezHoWoOTRtdZWUhd6GWTKJyns", //小程序后台添加的模板id "form_id"=>$formId."", "data"=>$sendData ]; $data = json_encode($data); return $this->http_request("https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=".$accessToken, $data,"json"); } // HTTP请求(支持HTTP/HTTPS,支持GET/POST) public function http_request($url, $data = null) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)) { curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $output = curl_exec($curl); curl_close($curl); return $output; }
代码逻辑不复杂,只要按照文档的要求传入正确的参数就可以了。
最后总结:
1、小程序AccessToken有2小时实效性,所以获取到AccessToken之后保存起来,实效后再去请求更新
2、用户的form_id只能使用一次,发送过消息之后就实效了。
3、form_id也有时间限制,一般是7天,过期实效
4、template_id一定要设置成对应的正确的模板id
5、设置form_id时一定要是字符串,最好这样$formId."",(这里是我遇到的坑,不这样我发现一直返回form_id不合法的错误),最好自己注意一下。
6、发送的参数数据一定要json_encode处理
7、一定要看清官方文档的参考案例代码,参数一定不能错,不要随意发挥。这很重要!
这应该是世界上最啰嗦的博文了。如果看了这篇文章还是各种问题,那么你该好好想想了~(手动狗头)
共有 0 条评论 - 微信小程序模板消息推送功能实现与详解