微信服务号模版信息,被广泛的用于信息通知,以及各大服务号突破4条图文每月的限制。
作为一个小白,兜兜转转饶了好多圈子,逛了好多博客,终于把微信群发模版信息功能搞定了,特此写文以作纪念,并且方便后人能够快速的完成开发。
1.了解模版信息的使用
微信官方模版消息接口文档
第一步:获取模版ID
通过在模版消息功能的模版库中使用需要的模版,可以获得模版ID。
第二步:请求接口
请注意,URL置空,则在发送后,点击模版消息会进入一个空白页面(ios),或无法点击(android)。
POST请求
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
请求包为一个json:
{ "touser":"OPENID", "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY", "url":"http://weixin.qq.com/download", "topcolor":"#FF0000", "data":{ "User": { "value":"黄先生", "color":"#173177" }, "Date":{ "value":"06月07日 19时24分", "color":"#173177" }, "CardNumber":{ "value":"0426", "color":"#173177" }, "Type":{ "value":"消费", "color":"#173177" }, "Money":{ "value":"人民币260.00元", "color":"#173177" }, "DeadTime":{ "value":"06月07日19时24分", "color":"#173177" }, "Left":{ "value":"6504.09", "color":"#173177" } } }
根据官方给出的接口文档,不难发现,模版消息的发送有一下两个重点:
1.每次发送都需要获取access_token
2.需要公众号粉丝的OPENID
2.获取粉丝OPENID
获取粉丝OPENID有两种方法
(一)最简单的一种是在微信公众号后台,打开与该粉丝的聊天页面,在浏览器url链接中提取
tofakeid=XXXXXXXXXXXXXXXXXXXXXXXXXXXX
等于号后面就是粉丝的openid了,共28位
这种方法适合给特定粉丝发送模版消息,适合少量推送
(二)通过微信接口获取用户列表
微信官方获取用户列表接口文档
实现方法
<?php $appid = "appid"; $appsecret = "appsecret"; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); $jsoninfo = json_decode($output, true); $access_token = $jsoninfo["access_token"]; $url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=$access_token"; $result = https_request($url); $jsoninfo = json_decode($result); // 默认false,为Object,若是True,为Array $data = $jsoninfo -> data; foreach($data -> openid as $x_value) { echo "'".$x_value . "',"; echo "<br>"; } function https_request($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($curl); if (curl_errno($curl)) {return 'ERROR '.curl_error($curl);} curl_close($curl); return $data; } ?>
说明:第十九、二十行高亮部分请根据自己的需求更改
3.模版消息推送
3.1对单个粉丝推送
<?php //获取微信access_token function getaccess_token(){ //appid与appsecret改成你自己的 $appid = 'appid'; $appsecret = 'appsecret'; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0); $data = curl_exec($ch); curl_close($ch); $data = json_decode($data,true); return $data['access_token']; } //设置与发送模板信息 function set_msg(){ //获取access_token $access_token = getaccess_token(); //这里是在模板里修改相应的变量 $formwork = '{"touser":"OPENID", "template_id":"template_id", "url":"https://www.54xavier.cn", "data":{ "first": { "value":"这里是自己定义的标题", "color":"#173177" }, "keyword1": { "value":"这里填写预约项目", "color":"#173177" }, "keyword2": { "value":"这里填写提交时间", "color":"#173177" }, "remark": { "value":"这里写结束语", "color":"#173177" } } }'; $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={$access_token}"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS,$formwork); $data = curl_exec($ch); curl_close($ch); return $data; } echo set_msg();
请注意修改5-7,22-43行代码
3.1对多个粉丝推送
<?php //获取微信access_token function getaccess_token(){ //appid与appsecret改成你自己的 $appid = 'appid'; $appsecret = 'appsecret'; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0); $data = curl_exec($ch); curl_close($ch); $data = json_decode($data,true); return $data['access_token']; } $ACCESS_TOKEN = getaccess_token(); //openid数组 $touser = [ 'oE_Xu02zO9VINd2etu_dnJUL-zuk', 'oE_Xu00r_8YYiGeqH29woyXqtc3g', 'oE_Xu092AgOHQArS9e83abpotoI0']; //模板消息请求URL $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . $ACCESS_TOKEN; //遍历发送微信消息 foreach ($touser as $value) { $data = getDataArray($value); $json_data = json_encode($data);//转化成json数组让微信可以接收 $res = https_request($url, urldecode($json_data));//请求开始 $res = json_decode($res, true); if ($res['errcode'] == 0 && $res['errcode'] == "ok") { echo "发送成功!<br/>"; } } //获取发送数据数组 function getDataArray($value) { $data = array( 'touser' => $value, //要发送给用户的openid 'template_id' => "template_id",//改成自己的模板id,在微信后台模板消息里查看 'url' => "https://www.54xavier.cn", //自己网站链接url 'data' => array( 'first' => array( 'value' => "这里是自己定义的标题", 'color' => "#000" ), 'keyword1' => array( 'value' => "这里填写预约项目", 'color' => "#f00" ), 'keyword2' => array( 'value' => "这里填写提交时间", 'color' => "#173177" ), 'remark' => array( 'value' => "这里写结束语", 'color' => "#f00" ), ) ); return $data; } //curl请求函数,微信都是通过该函数请求 function https_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, 1); $output = curl_exec($curl); curl_close($curl); return $output; } ?>
请注意修改5-6,19-22,42-59行代码
以上就是模版消息发送的全部内容,有错误的地方欢迎指出来,有不懂的欢迎给我留言
为什么不让文章显示摘要呢?现在这样搜索文章时鼠标滚轮滚半天。哈哈只是建议哈~