关于微信服务号模板消息群发问题

有关微信服务号模板群发,本来我只是想做个个人博客记录生活,但是…最近碰到了模板群发,所以嘛..又又是一番研究…这个你们就当教程看了。(其实也是为了给自己做个记录与提醒,万一哪天忘记,还能回头来看看,毕竟我也是个小白,刚开始研究这个的时候的确有点儿头疼,但是后来就看明白了…所以决定列个详细教程来,让不懂却需要到的人来看看)

需要用到的东西:

1. 备案域名

2. 一个VPS或主机

3. 如果以上均不具有,没关系,你可以尝试本地搭建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 &amp;&amp; $res['errcode'] == "ok") { echo "发送成功!&lt;br/&gt;"; }}//获取发送数据数组function getDataArray($value){ $data = array( 'touser' =&gt; $value, 'template_id' =&gt; "这里填写模板消息的ID",//改成自己的模板id,在微信后台模板消息里查看 'url' =&gt; "http://www.dreamendy.com", //自己网站链接url 'data' =&gt; array( 'first' =&gt; array( 'value' =&gt; "测试标题", 'color' =&gt; "#000" ), 'keyword1' =&gt; array( 'value' =&gt; "测试信息", 'color' =&gt; "#f00" ), 'keyword2' =&gt; array( 'value' =&gt; "测试内容", 'color' =&gt; "#173177" ), 'remark' =&gt; array( 'value' =&gt; "\n接收到了新消息,戳进来可以查看详情&gt;&gt;&gt;", 'color' =&gt; "#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_tokenfunction getaccess_token(){ $code = $_GET['code']; $appid = '修改为自己的appid'; $appsecret = '修改为自己的appsecret'; $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&amp;secret={$appsecret}&amp;code={$code}&amp;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&amp;redirect_uri=http://www.baidu.com/oauth.php&amp;response_type=code&amp;scope=SCOPE&amp;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/微信服务号模板群发代码

 

本文只是整理一下能用的代码并列出简单的教程仅供小白参考,侵删

4 COMMENTS
  1. 2018/10/18
    maqingxi

    我只看看,动手能力还不行,需要时再请教。

    • 2018/10/19
      Dreamendy
      @maqingxi 妈耶,我微博私聊你你都没理我诶
      • 2018/10/19
        maqingxi
        @Dreamendy 哈,没留意呀。已经关注你的微博。
        • 2018/10/19
          Dreamendy
          @maqingxi 看看我给你的建议啊(#狗头)
LEAVE A REPLY
取消回复
loading