GiteeAPI-Oauth2获取AccessToken之密码模式

 RorinL     2022年06月09日 星期四 0:35:25     php      gitee   php    

官方的教程是这样的

2. 密码模式
用户向客户端提供邮箱地址和密码。客户端将邮箱地址和密码发给码云认证服务器,并向码云认证服务器请求令牌。( POST请求。Content-Type: application/x-www-form-urlencoded )curl -X POST --data-urlencode "grant_type=password" --data-urlencode "username={email}" --data-urlencode "password={password}" --data-urlencode "client_id={client_id}" --data-urlencode "client_secret={client_secret}" --data-urlencode "scope=projects user_info issues notes" https://gitee.com/oauth/token
scope表示权限范围,有以下选项,请求时使用空格隔开user_info projects pull_requests issues notes keys hook groups gists enterprises
码云认证服务器返回 access_token
应用通过 access_token 访问 Open API 使用用户数据。

操作如下:

a.构造请求函数

function curl_post($url,$array,$header=['Content-Type: application/json;charset=utf-8']){
  
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    $post_data = $array; 
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post_data)); //这是重要的一步,因为官方文档给出的请求参数都要求urlencode,而且是form的post方式提交的
    $data = curl_exec($curl);
    curl_close($curl);
    return $data; 
  } 

b.发送oauth请求

function oauth2_pwdmode(){
    $username = $_REQUEST['username'];
    $password = $_REQUEST['password'];
    $client_id = '***';
    $client_secret = '***';
    $scope = 'user_info projects pull_requests issues notes keys hook groups gists enterprises';
    
    $parms = [
        "grant_type"=>"password",
        "username"=>$username,
        "password"=>$password,
        "client_id"=>$client_id,
        "client_secret"=>$client_secret,
        "scope"=>$scope
    ];
    $res = Action::curl_post('https://gitee.com/oauth/token',$parms,array('Content-Type:application/x-www-form-urlencoded;charset=utf-8'));
    return json_decode($res,true);
}

如此一来,你可在接收到对应的请求后,调用该方法向/oauth/token请求获取数据就可以了

发送请求成功后接收到的数据格式如下:

Array
(
    [access_token] => ce9fc0cb605b506062***********
    [token_type] => bearer
    [expires_in] => 86400
    [refresh_token] => 717ad1d63b12d0c0f1279a805990005e7ed68415628c04b74***********
    [scope] => projects user_info issues notes
    [created_at] => 1654705225
)

自此,你可以使用gitee的api了!


暂无评论

发表回复

您的电子邮箱地址不会被公开。

CAPTCHAis initialing...