微信网页授权
网页授权接口,两种方式,静默授权和高级授权(高级授权需要用户点确定,静默授权用户不知道)
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 ();
}
}
}