先上sdk的核心代码,代码是使用php写的,非常容易理解,我甚至想起了我亲戚家小孩看的《宝宝的PHP》。
<?php /** * @package YBAPI * * 授权认证接口 * * 使用授权认证协议认证方式的接口 * 授权接口中的接口对于appid或appsecret还有access_token有不同的需求 * 调用不同方法时需要开发人员保证已经把对应的配置值传入 */ class YBAPI_Authorize{ const API_OAUTH_CODE = "oauth/authorize"; const API_OAUTH_TOKEN = "oauth/access_token"; const API_TOKEN_QUERY = "oauth/token_info"; const API_TOKEN_REVOKE = "oauth/revoke_token"; /** * 构造函数 * * 使用YBOpenApi里的config数组初始化 * * @param Array 配置(对应YBOpenApi里的config数组) */ public function __construct($config) { foreach ($config as $key => $val) { $this->$key = $val; } } /** * 设置访问令牌 * * @param String 访问令牌 * @return YBAPI_Authorize 本身实例 */ public function bind($token) { $this->token = $token; return $this; } /** * 生成授权认证地址 * * 客户端重定向到授权地址 * 获取授权认证的CODE用于取得访问令牌 * * @param String 防跨站伪造参数 * @return String 授权认证页面地址 */ public function forwardurl($state = 'QUERY') { assert(!empty($this->appid), YBLANG::E_NO_APPID); assert(!empty($this->backurl), YBLANG::E_NO_CALLBACKURL); $query = http_build_query(array( 'client_id' => $this->appid, 'redirect_uri' => $this->backurl, 'state' => $state, )); return YBOpenApi::YIBAN_OPEN_URL.self::API_OAUTH_CODE.'?'.$query; } /** * 通过授权的CODE获取访问令牌 * * 应用服务器只需要请用此接口 * 自动处理重定向 * * @param String 授权CODE * @param String 应用回调地址 * @return Array 访问令牌哈希数组 */ public function querytoken($code, $redirect_uri = '') { assert(!empty($this->appid), YBLANG::E_NO_APPID); assert(!empty($this->seckey), YBLANG::E_NO_APPSECRET); if(empty($redirect_uri)) { $redirect_uri = $this->backurl; } $param = array( 'client_id' => $this->appid, 'client_secret' => $this->seckey, 'code' => $code, 'redirect_uri' => $redirect_uri ); $info = YBOpenApi::getInstance()->request(self::API_OAUTH_TOKEN, $param, true, false); if(isset($info['access_token'])) { $this->bind($info['access_token']); } return $info; } /** * 获取用户token */ public function getToken(){ if(isset($_GET['code']) && !empty($_GET['code'])) { /** * 使用授权码(code)获取访问令牌 * 若获取成功,返回 $info['access_token'] * 否则查看对应的 msgCN 查看错误信息 */ $info = $this->querytoken($_GET['code']); if(isset($info['access_token'])) { return array('status'=>true, 'token'=>$info['access_token']); }else { return array('status'=>false, 'msg'=>$info['msgCN']); } }else { // 重定向到授权服务器(这里使用header()重定向,可用使用其它方法) header('location: '.$this->forwardurl()); return array('status'=>false, 'msg'=>'');; } } } ?>
对于定义部分不作过多解释,首先我们可以看到,首先创建了几个函数用于提取config和token中的信息。
之后使用函数使用提取的内容创建一个可访问验证url,供用户调用
之后的便是处理服务器返回的json文件,来作为用户的令牌;显而易见,这是一个非常简单的,简单到完全不像sdk的sdk,以至于别的接口全要用户自己写,易班真的NB!!!