このアプリケーションは yii に基づいています。現在のプロセスは次のとおりです:
oschina認証リンクを生成します
ユーザーはリンクにアクセスした後にコードを取得します
そのコードを使用してaccess_tokenを交換します
コード:
<?php/** * @author xialei <xialeistudio@gmail.com> */class OschinaOauth extends CComponent{ public $ak; public $sk; public $callback; private $host = 'https://www.oschina.net'; public function init() { } /** * 获取授权链接 * @return string */ public function getRedirectUrl() { $params = array( 'response_type' => 'code', 'client_id' => $this->ak, 'redirect_uri' => Yii::app()->createAbsoluteUrl($this->callback) ); return $this->host . '/action/oauth2/authorize?' . http_build_query($params); } /** * 获取AccessToken * @param $code * @return string * @throws CException * @throws Exception */ public function getAccessToken($code) { $params = array( 'client_id' => $this->ak, 'client_secret' => $this->sk, 'grant_type' => 'authorization_code', 'code' => $code, 'dataType' => 'json' ); $url = $this->host . '/action/openapi/token'; $resp = Request::post($url, $params); $data = json_decode($resp,true); return $data; } public function refreshAccessToken() { }}
<?php/** * @author xialei <xialeistudio@gmail.com> */class OauthController extends Controller{ public function actionCallback($code, $state) { $data = Yii::app()->oauth->getAccessToken($code); print_r($data); } public function actionRedirect() { $url = Yii::app()->oauth->getRedirectUrl(); $this->redirect($url); }}
現在問題は、コードを取得できることですが、コードが oschina に移動して access_token を取得すると、エラーが報告されました。