微信平台分主动消息和被动消息,主动消息是生产服务器主动推送消息给微信平台,被动消息是用户行为导致微信平台推送消息给生产服务器。
-
主动消息需要:
- 1,将生产服务器ip加入ip白名单
- 2,然后根据appid和secret获取token
- 3,每次主动推送将token&在url上
-
被动消息:
- 1,填写生产服务器url路径在公众号配置上
- 2,获取token绑定
一、消息模板
-
1,获取微信消息模板api接口链接(巨坑,微信公众号文档上消息模板api链接有问题,正确应该在微信公众号,消息模板设置上,接口文档找)
-
2,获取消息模板id
-
3,获取需要发送消息的用户openid(关注该公众号)
-
4,构造消息模板数据
-
5,成功标志:
- (1)收到返回json数据,error=0,
- (2)微信平台主动推送xml到服务器
二、注意事项
-
2,消息模板语法:
- (1),数据格式构造,json格式
- (2),post方式发送
-
4,巨坑,巨坑,消息模板的openid不是微信唯一openid,是每个公众号对应用户的tofakeid
-
微信公众平台的所谓“openid”分为两种:
-
[第一种openid]为利用交互的xml中获取:
<![CDATA[fromUser]]>
每个用户针对每个微信公众平台唯一,即同一个用户对不同微信公众平台[第一种openid]是不同的;
个人倾向称之为fakeid,获取不需要授权页面。 -
[第二种openid]为利用微信提供的OAuth2.0接口(高级接口需要为认证的服务号)
每个用户唯一,也就是说同一个用户对不同微信公众平台的[第二种openid]都是一样的;
个人倾向称之为真正的openid,获取需要授权页面。
第一种公众平台开发者文档没有明说,但只要看过文档不难推断;
第二种所用接口详见:公众平台开发者文档-网页授权获取用户基本信息。
-
[第一种openid]为利用交互的xml中获取:
-
ps:详细脚本代码:
/**
* @param $open_id 用户openid
* @param $template_id 消息模板id
* @param $miniprogram 消息模板跳转的appid,pagepath页面链接,可根据自我需求删改
* @param $appid 公众号appid
* @param $num 申请编号,可根据自我需求删改
* 发送消息模板
* @return array
*/
public function SendMsg($open_id,$template_id,$miniprogram,$num){
try {
$token = $this->get_token();
} catch (\Exception $e) {
$e->getMessage();
}
//发送模板消息url
$send_url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={$token}";
$date=date("Y-m-d H:i:s",time());
$data=[
"touser"=>$open_id,
"template_id"=>$template_id,
'miniprogram'=>$miniprogram,
"data"=>[
"first"=>[
"value"=>"吸易商城提醒您,您的消杀片已到期,请及时更换",
],
"keyword1"=>[
"value"=>"商品更换提醒",
],
"keyword2"=>[
"value"=>$num,
],
"keyword3"=>[
"value"=>$date,
],
"keyword4"=>[
"value"=>'待处理',
],
"remark"=>[
"value"=>"详情信息,请戳详情了解",
],
],
];
//$postData = http_build_query($postData); //做一层过滤
$json_data=json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $send_url);
curl_setopt($ch, CURLOPT_HEADER, 0); //设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data );
$request=curl_exec ($ch);
curl_close($ch);
$request=json_decode($request,true);
if ($request['errcode']==0){
return [
'code'=>ApiCode::CODE_SUCCESS,
'msg'=>"消息模板发送成功",
];
}
return [
'code'=>ApiCode::CODE_ERROR,
'msg'=>$request,
];
}
版权声明:本文为weixin_43272542原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。