微信公众号获取用户信息

public function visitor_login(){
        header('Access-Control-Allow-Origin: *');
        header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
        header('Access-Control-Allow-Methods: GET, POST, PUT');

        $appid='********';
        $appsecret='********';

        if(!$_GET['code']){
            //获取当前的url地址
             $rUrl=urlencode("http://".$_SERVER['HTTP_HOST']."/Login/visitor_login/mobile/".I('mobile')."/verify/".I('verify').".html");  //带参数请求
            $u="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$rUrl."&response_type=code&scope=snsapi_userinfo&state=getWxOpenid&connect_redirect=1#wechat_redirect";  //微信回调地址
            //当scope的值为snsapi_userinfo时获取用户详细信息,但需要用户授权,为snsapi_base时静默授权,用户无感知,只能获取到openid
            redirect($u);
        }else{
            $acc=access($appid,$appsecret,$_GET['code']);

            //获取access_token和openid
            $u="https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=$appid&grant_type=refresh_token&refresh_token=".$acc['refresh_token'];  
            $u_info=getHttpJson($u);
            //用access_token和openid换取用户详细信息
            $userinfo = "https://api.weixin.qq.com/sns/userinfo?access_token=".$u_info['access_token']."&openid=".$u_info['openid'];
            $user_data=getHttpJson($userinfo);

            /*接收到用户详细信息后的操作*/

        }
    }

以下为用到的函数:

//获取refresh_token来换取access_token和openid
function access($appid,$appsecret,$code){
    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$code."&grant_type=authorization_code";
    $data = getHttpJson($url);
    S('access_token', $data['access_token'], 7000);
    return $data;
}
//get请求获取详细信息
function getHttpJson($url){
    $ch=curl_init();
    //设置传输地址
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //不验证证书下同
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //

    curl_setopt($ch, CURLOPT_URL, $url);
    //设置以文件流形式输出
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //接收返回数据
    $data=curl_exec($ch);
    curl_close($ch);
    $jsonInfo=json_decode($data,true);
    return $jsonInfo;
}

 

posted @ 2018-11-01 11:12  zrn  阅读(335)  评论(0编辑  收藏  举报