第一步:微信公众平台->基本配置->服务器配置->配置接收地址
第二步:接收微信服务器推送过来的事件
关注/取消关注事件
用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑。为保护用户数据隐私,开发者收到用户取消关注事件时需要删除该用户的所有信息。
微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。
关于重试的消息排重,推荐使用FromUserName + CreateTime 排重。
假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。
推送XML数据包示例:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
</xml>
参数说明:
项目 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 消息类型,event |
Event | 事件类型,subscribe(订阅)、unsubscribe(取消订阅) |
第三步:根据接收的数据处理事件
public function index(){
$data = input();
file_put_contents('./aaa.log',\json_encode($data));
$postStr = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : file_get_contents("php://input");
$objectxml = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);//将文件转换成 对象
$datas = array();
foreach ($objectxml as $k => $v) {
$datas[(string) $k] = (string) $v;
}
//用户关注和取消关注事件
if(isset($datas['Event'])){
if($datas['Event'] == 'subscribe' || $datas['Event'] == 'unsubscribe'){
//@todo 处理自己的逻辑
}
}
return '';
}
第四步:根据公众号openid获取用户信息
public function getUserGzInfo(){
$postData = input();
$ACCESS_TOKEN = $this->getAccessToken();
$userInfoUrl = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$ACCESS_TOKEN.'&openid='.$postData['FromUserName'].'&lang=zh_CN';
$userInfo = request_get($userInfoUrl);
$userInfo = json_decode($userInfo,true);
successMsg('成功',userInfo);
}
public function getAccessToken(){
$appid = '自己填写公众号openid';
$secret = '自己填写公众号密钥';
//获取token
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret;
$ret = request_get($url);
if($ret == false){
return false;
}
$ret = @json_decode($ret,true);
return $ret['access_token'];
}
分享完毕!如有问题请留言