交互原理
用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的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(取消订阅) |
核心代码
<?php
class wxController extends grace{
public function index(){
$gracewechat = tool('graceWeChat');
//获取消息
$gracewechat->getMsg();
//判断消息类型为 event [事件] 类型
if($gracewechat->msgType == 'event'){
switch($gracewechat->event){
//关注
case 'subscribe':
//获取用户信息
$user = $gracewechat->getUser($gracewechat->openId);
$gracewechat->reTextMsg($user['nickname'].'您好,感谢关注 ^_^');
//您可以使用数据库记录用户信息
//取消关注
case 'unsubscribe':
//取消关注代码.....
//可以在数据库内改变用户关注的状态
break;
}
}
}
}