<?php
namespace App\Http\Controllers\Oauth;
use App\Http\Controllers\Utils\Code;
/**
* Class OsChinaController
* @author <fl140125@gmail.com>
* @package App\Http\Controllers\Oauth
*/
class OsChinaController extends OAuthController
{
protected $appid;
protected $appsecret;
protected $redirectUri;
protected static $instance;
protected $apiUrl = 'https://www.oschina.net/';
public function __construct(string $appid, string $appsecret)
{
parent::__construct();
$this->appid = $appid;
$this->appsecret = $appsecret;
$this->redirectUri = config('app.url').'api/v1/callback/os_china';
}
public static function getInstance(string $appid, string $appsecret)
{
if (!self::$instance instanceof self) {
self::$instance = new static($appid, $appsecret);
}
return self::$instance;
}
public function getAuthUrl($length = 32, $callback = '')
{
$arr = [
'client_id' => $this->appid,
'response_type' => 'code',
'redirect_uri' => empty($callback) ? $this->redirectUri : $callback,
'state' => $this->getState($length),
];
return $this->apiUrl.'action/oauth2/authorize?'.http_build_query($arr);
}
public function getAccessToken(string $code)
{
$arr = [
'client_id' => $this->appid,
'client_secret' => $this->appsecret,
'grant_type' => 'authorization_code',
'code' => $code,
'redirect_uri' => $this->redirectUri,
'dataType' => 'json',
'callback' => 'json'
];
$result = $this->curl->post($this->apiUrl.'action/openapi/token', $arr);
if (!$result) {
return $this->error(Code::ERROR, 'request interface failed');
}
$result = (array)$result;
return isset($result['error']) ? $this->error(Code::ERROR, $result['error_description']) : $result;
}
public function refreshToken(string $refreshToken)
{
$arr = [
'client_id' => $this->appid,
'client_secret' => $this->appsecret,
'grant_type' => 'refresh_token',
'redirect_uri' => $this->redirectUri,
'refresh_token' => $refreshToken,
'dataType' => 'json',
'callback' => 'json'
];
$result = $this->curl->post($this->apiUrl.'action/openapi/token', $arr);
if (!$result) {
return $this->error(Code::ERROR, 'request interface failed');
}
$result = (array)$result;
return isset($result['error']) ? $this->error(Code::ERROR, $result['error_description']) : $result;
}
public function getUserInfo(string $access_token)
{
$arr = [
'access_token' => $access_token,
'dataType' => 'json'
];
$result = $this->curl->post($this->apiUrl.'action/openapi/user', $arr);
if (!$result) {
return $this->error(Code::ERROR, 'request interface failed');
}
$result = (array)$result;
return isset($result['error']) ? $this->error(Code::ERROR, $result['error_description']) : $result;
}
public function getUserInformation(string $access_token, string $user, string $friend)
{
$arr = [
'access_token' => $access_token,
'dataType' => 'json',
'user' => $user,
'friend' => $friend
];
$result = $this->curl->post($this->apiUrl.'action/openapi/user_information', $arr);
if (!$result) {
return $this->error(Code::ERROR, 'request interface failed');
}
$result = (array)$result;
return isset($result['error']) ? $this->error(Code::ERROR, $result['error_description']) : $result;
}
}