微信网页授权

网页授权接口,两种方式,静默授权和高级授权(高级授权需要用户点确定,静默授权用户不知道)

public function getOauth($scope="snsapi_base",$pageurl){
    $appid = C('AppId');//这里我的APPID存在配置里了
    $redirect_uri = urlencode($pageurl);//一定是后台填写的网页授权域名之下
    $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=$scope&state=123#wechat_redirect ";
    header('location:'.$url);
}


用上一步拿到的code来获取access_token

public function getOauthToken($code){
    //2、用code这个票据去获取到网页授权中的access_token和openid,access_token有效期是2小时
    $appid = C('AppId');
    $appsecret = C('AppSecret');
    $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
    $res = $this->http_curl($url,"get");
    return $res;
    
}


用上一步拿到的access_token和openid来获取用户信息

public function getUserInfo($access_token,$openid){
    //3、拿access_token和openid来获取用户详细信息
    $url="https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";
    $res = $this->http_curl($url,"get");
    return $res;
}


登录入口方法

public function wxLogin(){
    $code = isset ( $_GET ['code'] ) ? $_GET ['code'] : '';
    $pageurl = 'http://www.guitutu.com/wxLogin';//当前页面地址
    // 如果code为空,跳转到获取code,先以静默方式获取
    if (empty ( $code )) {          
        $this->getOauth('snsapi_base',$pageurl);
        exit ();
    }
    // code不为空,获取token
    $token = $this->getOauthToken($code);

    if ($token) {
        $opendid = $token ['openid'];
        $access_token = $token ['access_token'];
        $userinfo = $this->getUserInfo ( $access_token, $opendid );//获取用户信息
        if ($userinfo && $userinfo ['openid']) {
        	//保存用户信息
            $data = array (
                'openid' => $userinfo ['openid'],
                'nickname' => $userinfo ['nickname'],
                'sex' => $userinfo ['sex'],
                'city' => $userinfo ['city'],
                'province' => $userinfo ['province'],
                'country' => $userinfo ['country'],
                'headimgurl' => $userinfo ['headimgurl'],
            );
            $_SESSION ["user"] = $data;
        } else {
            // 如果每拿到就用高级授权(需要用户点击确定的)
            $this->getOauth("snsapi_userinfo",$pageurl);
            exit ();
        }
        
    }
}


评论  表情