微信模版消息封装接口
本文主要就微信模板消息写了个通用接口,参数参考微信文档。
-
使用模版消息,首先需在微信公众号设好微信模版,如(微信测试号模版消息设置):
模版消息:
您的订单已签收! 上门取货时间:{{FIRST.DATA}} 货物名称:{{KEYWORD1.DATA}} 物流公司:{{KEYWORD2.DATA}}
“{{keywords.DATA}}”时我们接下来要传的数据参数,可以看到每个模版有自己的模版id; -
发送模版消息接口(微信)
调用接口:https://api.weixin.qq.com/cgi-bin/template/send?access_token=ACCESS_TOKEN
注意下post参数就是个json格式数据,需要对应你的模板消息数据,上面的列子对应的post参数为:
/*
*data 是 模板数据
*color 否 模板内容字体颜色,不填默认为黑色
*/
{
"touser":"OPENID", //指定用户openid
"template_id":"UFHH7QQjA2MO7_wIfMNhobF5WPaPl_O8LuZS0LWNY7U",
"url":"",
"miniprogram":"",
"data":{
"FIRST": {
"value":"2019年9月22日 15:30",
"color":"#173177"
},
"KEYWORD1":{
"value":"安踏运动鞋",
"color":"#173177"
},
"KEYWORD2": {
"value":"韵达物流",
"color":"#173177"
}
}
}
-
封装接口(php)
为了避免post数据的不可控性(不同模版的参数属性不一致),依据模版的数据结构,做了一套通用的接口。在这之前需要获取微信access_token的方法,提供个参考类文件:
JSSDK.php
//获取access_token信息
public function jssdk_param(){
$jssdk = new JSSDK();
$signPackage = $jssdk->getSignPackage();
$data = array();
$token = md5(microtime(true));
$_SESSION['signtoken'] = $token;
$data['token'] = $token;
$data['signPackage'] = $signPackage;
$data['access_token']=$jssdk->getAccessToken();
return $data;
}
#发送模版消息
public function actionSendModelMsg(){
$param = array();
$param['touser'] = $_POST['touser'];
$param['template_id'] = $_POST['template_id'];
$param['url'] = $_POST['url'];
$param['miniprogram'] = $_POST['miniprogram'];
$data =$_POST['data'];
if( ! $param['touser'] ) $this->error("touser不能为空");
if( ! $param['template_id'] ) $this->error("请提供合法的模版id");
if( !$data ) $this->error('请提供模版数据');
$param['data'] = json_decode($data,1);
$d = $this->jssdk_param();
$url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={$d['access_token']}";
$res = $this->https_request($url,json_encode($param),'json');
echo json_encode($res);
}
//发送请求
function https_request($url,$data,$type){
if($type=='json'){
$headers = array("Content-type: application/json;charset=UTF-8","Accept: application/json","Cache-Control: no-cache", "Pragma: no-cache");
}
$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);
curl_setopt( $curl, CURLOPT_HTTPHEADER, $headers );
$output = curl_exec($curl);
curl_close($curl); print_r($output);die;
return $output;
}
#返回错误信息
public function error($msg){
header("Content-type: application/json");
$o['code'] = '1';
$o['errorMsg'] = $msg;
echo json_encode($o);
die;
}
这样来发送模版主要变更的就是data参数了,配置好参数,业务处理完http方式调下接口就可以了。