网站第三方登陆
//先从数据表中看是否绑定过
$token = logic("Oauth")->getAuthToken($this->member['uid'],$action);
if(!empty($token)){
$token = json_encode($token);
$token = str_encrypt($token);
$this->shareback($action,$token);
}else{
//中奖后分享参数
if($_GET['prize']){
$callback=__URL_JUANPI__.'/act/shareback?prize='.$_GET['prize'];
}else{
$callback=__URL_JUANPI__.'/act/shareback';
}
//未绑定过跳往User/OauthAction.class.php的connect方法
redirect(__URL_MEMBER__."/oauth/connect?type={$action}&callback={$callback}");
}
我们来看OAUTH的connect方法,这个是授权的核心入口,大家会发现这里貌似没有callback地址,也就是客户从新浪登陆后获得accesstoken后的回调地址
public function connect($type,$callback){
//缓存回调地址
cookie('callback_'.$type,$callback);
cookie('callback_cancel',$_SERVER['HTTP_REFERER']);
//加载ThinkOauth类并实例化一个对象
import("ORG.ThinkSDK.ThinkOauth");
$auth = ThinkOauth::getInstance($type);
//跳转到授权页面
$url=$auth->getRequestCodeURL();
$type=='taobao' && I('view')=='wap' && $url.='&view=wap';
redirect($url);
}
大家可以看ThinkOauth.class.php的getRequestCodeURL方法,可以发现这个读取了系统配置的CALLBACK地址,这个地址在conf/oauth.php可以看到,其实也就是写在connect方法下面的callback方法,这个方法会调用$token = $auth->getAccessToken($code , $extend);去获取token
客户端这块包括网页登陆跟端登,网页登陆客户端会调用oauthaction的web_connect方法
public function web_connect($params){
//请求验证
empty($params['type']) && $this->error(2001,'授权类型错误');
//重定向授权
$callback='http://api.juanpi.com/oauth/web/access';
redirect(__URL_OAUTH__."?view=wap&type={$params['type']}&callback={$callback}");
}
这里定义了Callback方法,会跳往web_access方法而不是我们配置中的callback方法
//先从数据表中看是否绑定过
$token = logic("Oauth")->getAuthToken($this->member['uid'],$action);
if(!empty($token)){
$token = json_encode($token);
$token = str_encrypt($token);
$this->shareback($action,$token);
}else{
//中奖后分享参数
if($_GET['prize']){
$callback=__URL_JUANPI__.'/act/shareback?prize='.$_GET['prize'];
}else{
$callback=__URL_JUANPI__.'/act/shareback';
}
//未绑定过跳往User/OauthAction.class.php的connect方法
redirect(__URL_MEMBER__."/oauth/connect?type={$action}&callback={$callback}");
}
我们来看OAUTH的connect方法,这个是授权的核心入口,大家会发现这里貌似没有callback地址,也就是客户从新浪登陆后获得accesstoken后的回调地址
public function connect($type,$callback){
//缓存回调地址
cookie('callback_'.$type,$callback);
cookie('callback_cancel',$_SERVER['HTTP_REFERER']);
//加载ThinkOauth类并实例化一个对象
import("ORG.ThinkSDK.ThinkOauth");
$auth = ThinkOauth::getInstance($type);
//跳转到授权页面
$url=$auth->getRequestCodeURL();
$type=='taobao' && I('view')=='wap' && $url.='&view=wap';
redirect($url);
}
大家可以看ThinkOauth.class.php的getRequestCodeURL方法,可以发现这个读取了系统配置的CALLBACK地址,这个地址在conf/oauth.php可以看到,其实也就是写在connect方法下面的callback方法,这个方法会调用$token = $auth->getAccessToken($code , $extend);去获取token
客户端这块包括网页登陆跟端登,网页登陆客户端会调用oauthaction的web_connect方法
public function web_connect($params){
//请求验证
empty($params['type']) && $this->error(2001,'授权类型错误');
//重定向授权
$callback='http://api.juanpi.com/oauth/web/access';
redirect(__URL_OAUTH__."?view=wap&type={$params['type']}&callback={$callback}");
}
这里定义了Callback方法,会跳往web_access方法而不是我们配置中的callback方法