关于微信服务号模板消息群发问题
有关微信服务号模板群发,本来我只是想做个个人博客记录生活,但是…最近碰到了模板群发,所以嘛…又又是一番研究…这个你们就当教程看了。(其实也是为了给自己做个记录与提醒,万一哪天忘记,还能回头来看看,毕竟我也是个小白,刚开始研究这个的时候的确有点儿头疼,但是后来就看明白了…所以决定列个详细教程来,让不懂却需要到的人来看看)
需要用到的东西:
-
备案域名
-
一个VPS或主机
-
如果以上均不具有,没关系,你可以尝试本地搭建PHP环境进行调试(这只是一种可能…)
打开微信公众号平台的登录地址登录进去。https://mp.weixin.qq.com/
随后一次点击左侧菜单的《开发>基本配置》,要先获取到公众号的appid与appsecret。
如图所示,先保存的你的appid和你的appsecret密钥(密钥首次需重置才能获得,记得保存好。)随后把你本机的IP地址添加到IP白名单里面(这里是为了你本机调试时能够获取到access_token)
随后再以此点击《公众号设置>功能设置》中把域名添加到 “ 业务域名 ” “ JS接口安全域名 ” “ 网页授权域名 ” 里面(之类添加域名需要已备案的域名,未备案的域名将不可添加)。
还需要注意一下是:
这里需要将验证的文件放到你域名的根目录里,就是放在你服务器绑定域名的根目录里面。
接下来,就是考代码调试了,微信官方也给出了部分调试代码。https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277
接下来放上我从网上找半天测试能用的代码吧…
<?php $ACCESS_TOKEN = "这里填写你的access_token";//ACCESS_TOKEN //openid数组 $touser = [ '<span style="color: #ff0000;">这里填写用户的openid</span>', //用户openid '<span style="color: #ff0000;">这里填写用户的openid</span>']; //用户openid //模板消息请求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, 'template_id' => "这里填写模板消息的ID",//改成自己的模板id,在微信后台模板消息里查看 'url' => "http://www.dreamendy.com", //自己网站链接url 'data' => array( 'first' => array( 'value' => "测试标题", 'color' => "#000" ), 'keyword1' => array( 'value' => "测试信息", 'color' => "#f00" ), 'keyword2' => array( 'value' => "测试内容", 'color' => "#173177" ), 'remark' => array( 'value' => "\n接收到了新消息,戳进来可以查看详情>>>", 'color' => "#3d3d3d" ), ) ); 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; } ?>
上面这些是针对单个用户的模板消息发送,是用来测试模板的时候调试的,当然你也可以针对每个用户来进行发送,下面说一下怎么获得用户的openid。
首先新建一个php文件,这里命名为《oauth.php》
把下面代码放进去
<?php //获取微信access_token function getaccess_token(){ $code = $_GET['code']; $appid = '修改为自己的appid'; $appsecret = '修改为自己的appsecret'; $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$appsecret}&code={$code}&grant_type=authorization_code"; $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); echo $data; } getaccess_token();
回调链接需要URL转码
给大家提供一个转码工具
在线转码工具 http://tool.oschina.net/encode?type=4
最终的回调链接是
http%3A%2F%2Fwww.baidu.com%2Foauth.php
例如的你APPID是:wx66666666666666
整个用户要访问的网页就是
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx66666666666666&redirect_uri=http://www.baidu.com/oauth.php&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
用户访问的网页也需要URL转码
最终的网址是:
https%3A%2F%2Fopen.weixin.qq.com%2Fconnect%2Foauth2%2Fauthorize%3Fappid%3Dwx66666666666666%26redirect_uri%3Dhttp%3A%2F%2Fwww.baidu.com%2Foauth.php%26response_type%3Dcode%26scope%3DSCOPE%26state%3DSTATE%23wechat_redirect
然后用微信访问上面的最终的网址,就会返回一串JSON数据,里面有openid
复制这个openid,把上面需要修改的用户openid替换掉。
把第一个测试的代码复制出来创建一个php文件命名一下,这里就命名为,把里面标注要修改的东西都修改一下,随后在把你服务器的IP地址添加到IP白名单里面(这里是为了你网页调试时能够获取到access_token并发送模板消息,我当时就是犯了这个错误,试了半天没成功…后来想起来再试,立马可以了)
下面是群发代码:
<?php $appid = "修改为你的appid"; $appsecret = "修改为你的appsecret"; $times= date('y年m月d日 H:i:s',time()); echo $times."</br>"; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;//取得token $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"]; // echo $access_token."</br>"; $begin=0; if($begin>=10000) {$url= "https://api.weixin.qq.com/cgi-bin/user/get?access_token=".$access_token."&next_openid=".$_GET['next_openid'];} else{$url= "https://api.weixin.qq.com/cgi-bin/user/get?access_token=".$access_token; } $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); $array = json_decode($output, true); echo $array["count"]."</br>"; // foreach ($array["data"]["openid"] as $key=>&$value) {//获取用户的唯一标识 // echo ($key)."->".$value."</br>" ; // } //群发注释 $times= date('y年m月d日 H:i:s',time()); $template = array('touser' =>"oC282t60QEDt0El-hcVOShgzgTmQ",//&$value, // // 'template_id' => "这里修改为你的模板ID", 'url' => "http://www.dreamendy.com/",//这里可以修改为你想跳转的网页地址 'topcolor' => "#7B68EE", 'data' => array('first' => array('value' => urlencode("标题抬头"), 'color' => "#743A3A", ), 'keyword1' => array('value' => urlencode("内容一"), 'color' => "#FF0000", ), 'keyword2' => array('value' => urlencode("内容2"), 'color' => "#C4C400", ), 'remark' => array('value' => urlencode("\\n你好。点击查看“详情”!"), 'color' => "#008000", ), ) ); // var_dump($template)."</br>"; // echo urldecode(json_encode($template))."</br>"; $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$access_token; $result = https_request($url, urldecode(json_encode($template)));//"";//群发命令 // var_dump($result)."</br>"; // } //群发关闭 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); // echo "</br>"; // echo $output; return $output; } ?>
代码仅供参考,本文显示的高亮代码有点儿问题,整理成了php文件直接在里面修改上传即可,传送门:http://download.dreamendy.com/?dir=Code/PHP/微信服务号模板群发代码
本文只是整理一下能用的代码并列出简单的教程仅供小白参考,侵删