微信公众号获取用户信息流程

1,准备好appid,appsecret,把自己服务器的ip加入ip白名单。

在这里插入图片描述

2,在开发者工具里面找到调试工具,打开调试工具,输入自己的appid和appsecret进行检测。出现如下页面表示正常,可以获取到access_token了。如果有报错,并提示一个未知ip,则把这个ip也添加到白名单,再来测试,一般就都可以获取到access_token了。

在这里插入图片描述

3,代码,一定要注意回调地址,这里的回调地址指向的就是该文件下的getUserOpenId()方法
// 用户请求这个方法的时候,发送请求到微信服务器,携带appid和appsecret,他会返回一个code到我的回调地址里面
    public function getBaseInfo(){
        $appId = 'wx4b4812b31dsde4cd';     
        $redirect_uri="http://xxxxxxx/aaa/bbb/getUserOpenId/";
        //这里的回调地址需要http://,这个地址指向下一个方法 getUserOpenId(),也就是微信返回给我的消息我要他返回到这个方法里面
        $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";
        // 注意这里必须有 exit;否则不能发起请求的
        header('location:'.$url);exit;
    }

public function getUserOpenId(){
    $appId = 'wx4b4812b31dsde4cd';  
    $appSecret= '94d167851dsde4cdd4f6991b9s2852b3';  
    //2.获取到网页授权的access_token        
    $code = $_GET['code'];
    $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appId."&secret=".$appSecret."&code=".$code."&grant_type=authorization_code ";
    //3.拉取用户的openid
    $res = $this->http_curl($url);
    // echo $res;//打印即可看到用户的openid

    $data = json_decode($res,true);
    if(!empty($data['access_token']) && !empty($data['openid'])){
        $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$data['access_token']."&openid=".$data['openid']."&lang=zh_CN"; 
        $userInfo = $this->http_curl($url);
        MemberModel::useradd($userInfo);
    }
}

public function valid(){
    $echoStr = $_GET["echostr"];
    //valid signature , option
    if($this->checkSignature()){
        echo $echoStr;
        exit;        
    }
}


private function checkSignature(){
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];     
    $token = TOKEN;
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    if( $tmpStr == $signature ){
        return true;
    }else{
        return false;
    }

}


public function http_curl($url){
    $curl = curl_init();
    //设置抓取的url
    curl_setopt($curl, CURLOPT_URL, $url);
    //设置头文件的信息作为数据流输出
    curl_setopt($curl, CURLOPT_HEADER, 0);
    //设置获取的信息以文件流的形式返回,而不是直接输出。
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    //执行命令
    $data = curl_exec($curl);
    //关闭URL请求
    curl_close($curl);
    //显示获得的数据
    return $data;
}
4,当用户请求到getBaseInfo()方法时,就会提示用户是否授权让该公众号得到自己的微信信息。当用户点击同意后,我们的回调地址里就可以接收到微信返回的code,我们获取这个code后,再用这个code和appid,appsecret一起向微信服务器发起请求获取用户信息。当用户拒绝的话,我们就拿不到code,也就不能获取用户信息了。有了这三个数据,微信服务器就会返回我们关于用户的json格式的数据信息。就在回调地址的$res = t h i s − > h t t p c u r l ( this->http_curl( this>httpcurl(url);打印$res就可以看到用户信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿联盟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值