模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。
如图:
如上图所示,在我们的生活中,无论是微商城消费,还是日常生活消费,都可能收到这种提示,比如订单通知,快递状态通知,银行卡支付通知,都属于业务通知,很多公众号也都实现了这种功能,当触发了某种行为或状态改变,就会发送这么一个消息给你,因为这种消息都是按照一定的的格式来编辑,所以也叫模板消息。
发送模板消息
1.公众号这边要提示一下,查看你的公众号是否是服务号,登录微信公众平台,找到功能,选择模板消息
然后选择相应的行业,提交审核,审核通过后保存之后,选择合适的模板,微信会给该模板分配一个ID,待我们要发送模板消息的时候就需要用到这个ID了。
2.发送给用户
打开文档”发送模板消息”
获得发送模板的接口地址:https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
使用POST的方式来发送,并且把模板消息的数据以json数据的格式传递到该接口。
必传的只有 touser接收者,template_id模板id,data模板数据这3个参数,其他的可以不传,如果传了就会有相应的跳转,比如跳转至指定url,或者跳转至小程序。
json数据
$template=array(
'touser'=>$openid, //用户openid
'template_id'=>$tenpalate_id, //在公众号下配置的模板id
'url'=>"https://www.szyunshutong.com/api/official/memberRechargeRecords.html", //点击模板消息会跳转的链接
'topcolor'=>"#7B68EE",
'data'=>array(
'first'=>array('value'=>urlencode("您好,您已成功进行充值。"),'color'=>"#000000"),
'accountType'=>array('value'=>urlencode('数量'),'color'=>'#000000'), //keyword需要与配置的模板消息对应
'account'=>array('value'=>urlencode($coin_num),'color'=>'#000000'),
'amount'=>array('value'=>urlencode($money),'color'=>'#000000'),
'result'=>array('value'=>urlencode('充值成功'),'color'=>'#000000'),
'remark' =>array('value'=>urlencode('如有疑问,请致电联系我们'),'color'=>'#000000'), )
);
$json_template=json_encode($template);
注意点:检查获取我们调用接口的凭据AccessToken(日限额2000次,时效2小时),我当时第一次就是败在这AccessToken
上,源码中最后一个方法是重新获取AccessToken的,参考!
3.直接上源码
/**
* 发送模板消息
*/
public function send_notice($openid,$money,$coin_num){
//获取access_token
if ($_COOKIE['access_token']){
$access_token2=$_COOKIE['access_token'];
}else{
$token=$this->get_access_token_mp();
}
//模板消息
$tenpalate_id="-pFrstxxxlTGcmIJTa8twuZFozHnqCmkVO3Lae5uR34";
//模板消息
$template=array(
'touser'=>$openid, //用户openid
'template_id'=>$tenpalate_id, //在公众号下配置的模板id
'url'=>"https://www.szyunshutong.com/api/official/memberRechargeRecords.html", //点击模板消息会跳转的链接
'topcolor'=>"#7B68EE",
'data'=>array(
'first'=>array('value'=>urlencode("您好,您已成功进行路票充值。"),'color'=>"#000000"),
'accountType'=>array('value'=>urlencode('路票数量'),'color'=>'#000000'), //keyword需要与配置的模板消息对应
'account'=>array('value'=>urlencode($coin_num."张"),'color'=>'#000000'),
'amount'=>array('value'=>urlencode($money."元"),'color'=>'#000000'),
'result'=>array('value'=>urlencode('充值成功'),'color'=>'#000000'),
'remark' =>array('value'=>urlencode('如有疑问,请致电联系我们'),'color'=>'#000000'), )
);
$json_template=json_encode($template);
$url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$token;
$res=$this->curl_post($url,urldecode($json_template));
// print_r($res);die;
if ($res['errcode']==0){
return 1;
}else{
return 0;
}
}
/**
* 将模板消息json格式化(根据情况灵活组合,我这里直接把模板消息放到了请求发送的接口)
*/
public function json_tempalte(){
$tenpalate_id="-pFrstxxxlTGcmIJTa8twuZFozHnqCmkVO3Lae5uR34";
//模板消息
$template=array(
'touser'=>'.$openid.', //用户openid
'template_id'=>".$tenpalate_id.", //在公众号下配置的模板id
'url'=>".$uel.", //点击模板消息会跳转的链接
'topcolor'=>"#7B68EE",
'data'=>array(
'first'=>array('value'=>urlencode("您的活动已通过"),'color'=>"#FF0000"),
'accountType'=>array('value'=>urlencode('测试文章标题'),'color'=>'#FF0000'), //keyword需要与配置的模板消息对应
'account'=>array('value'=>urlencode(date("Y-m-d H:i:s")),'color'=>'#FF0000'),
'amount'=>array('value'=>urlencode('测试发布人'),'color'=>'#FF0000'),
'result'=>array('value'=>urlencode('充值成功'),'color'=>'#FF0000'),
'remark' =>array('value'=>urlencode('备注:这是测试'),'color'=>'#FF0000'), )
);
$json_template=json_encode($template);
return $json_template;
}
/**
* @param $url
* @param array $data
* @return mixed
* curl请求
*/
function curl_post($url , $data=array()){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// POST数据
curl_setopt($ch, CURLOPT_POST, 1);
// 把post的变量加上
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
//获取微信公众平台token
public function get_access_token_mp()
{
$token = session("access_token_mp");
if($token){
return $token;
}
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->appId}&secret={$this->appSecret}";
$res = $this->curl_post($url);
$td = json_decode($res, true);
if($td['access_token']){
session("access_token_mp", $td['access_token'], $td['expires_in'] - 120);
return $td['access_token'];
}else{
return false;
}
}
4.运行时把json数据传入到方法中,我们可以看到打印出来的返回的结果。
{"errcode":0,"errmsg":"ok","msgid":232391810540961792}
errcode为0代表已经发送成功。如果errcode是其他值,请打开文档的错误返回码页面中查找错误信息。
附模板消息接口文档地址:https://mp.weixin.qq.com/advanced/tmplmsg?action=faq&token=299852868&lang=zh_CN
有疑问的,可以私信我!!!