根据微信公众号关注/取消关注事件,获取用户信息

第一步:微信公众平台->基本配置->服务器配置->配置接收地址

第二步:接收微信服务器推送过来的事件

微信文档地址:

关注/取消关注事件
用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的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'];
}

分享完毕!如有问题请留言

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值