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

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

END 591 2018-10-16

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

需要用到的东西:

  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_token
function 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/微信服务号模板群发代码

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