当前位置: 首页 > 知识库问答 >
问题:

PHP -交换刷新和访问令牌的授权代码(无cURL)

谢昂雄
2023-03-14

我正在创建一个小的YouTube Analytics API脚本,我一直在尝试用用户授权码交换访问令牌。

我已经设法获得了授权令牌,但是我不知道如何“向Google提交POST请求”。

我认为这是可行的:

if (isset($_GET['code'])) {
    // Send Post Request To Exchange Access Code
}

但我不知道在条件之间放什么才能真正交换代码。当我访问该位置时

https://accounts.google.com/o/oauth2/code={代码}

我得到一个未知的URL。

共有1个答案

饶骁
2023-03-14

您需要使用cURL(或类似的库),因为这是您的服务器直接与Google通信以交换访问代码的方式。您的用户不会看到您的密钥,因为 cURL 会从您的终端发出请求。然后,cURL 将允许你获取返回的响应,并提取和提取访问令牌,然后将每个请求的标头发送到 Analytics API(或者,如果你已将access_type设置为脱机,你将能够提取刷新令牌)。代码可能看起来像这样(根据您的特定需求量身定制):

function get_oauth2_token($code) {

global $client_id;
global $client_secret;
global $redirect_uri;

$oauth2token_url = "https://accounts.google.com/o/oauth2/token";
$clienttoken_post = array(
"code" => $code,
"client_id" => $client_id,
"client_secret" => $client_secret,
"redirect_uri" => $redirect_uri,
"grant_type" => "authorization_code"
);

$curl = curl_init($oauth2token_url);

curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $clienttoken_post);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$json_response = curl_exec($curl);
curl_close($curl);

$authObj = json_decode($json_response);

if (isset($authObj->refresh_token)){
    //refresh token only granted on first authorization for offline access
    //save to db for future use (db saving not included in example)
    global $refreshToken;
    $refreshToken = $authObj->refresh_token;
}

$accessToken = $authObj->access_token;
return $accessToken;
}

返回访问令牌后,您就可以进行API调用了。

 类似资料:
  • 我认为服务URL有问题。我错了吗? 有谁能提供工作URL吗?

  • 我执行本问题中描述的步骤: Laravel的5.3护照和api路由 从api的路径来看,一切都很好,我可以注册新用户,读取他们的数据等等。 然后在AuthServiceProvider上添加此命令 护照::代币ExpireIn(碳::现在()- 我以url{{url}}/oauth/token登录邮递员 正文:application/x-www-form-urlencoded { 授权类型:{pa

  • 我遇到了使用文档签名 API 的第一个障碍,需要一些帮助。 我将docusignrestapi集合导入到Postman中。我设置了iKey、iSec、encodedKeys和codeFromUrl变量。 当尝试发送'01-授权代码授予访问令牌'post API时,我每次都得到以下响应。 我尝试从Postman中删除所有内容,包括环境,并从DocuSign中删除该应用程序,然后重新开始,以便我的所有

  • 我们正在尝试将DocuSign与我们的产品集成。 我们的场景:我们的组织有一个(合作伙伴)帐户。我们创建了一个集成密钥(ClientID)和Secret。我们希望我们的客户使用他们自己的帐户(不是我们合作伙伴帐户的子帐户(管理员-用户关系))创建信封,并生成签名URL以及我们的集成商密钥和机密。 以下步骤: 创建了一个帐户(合作伙伴帐户) 问题:是否可以将一个帐户的集成商密钥和密码与另一个帐户(两

  • 我能够获得此访问令牌,但是,当我试图获得刷新令牌时,我得到一个错误。 在这一刻,我正在测试这个使用邮递员。 我正在做以下工作: null null null null null

  • 我想我获得了使用授权代码授予类型的OAuth2流。资源所有者登录到服务器,然后使用授权代码重定向到客户端。然后客户端使用授权代码向授权服务器查询访问令牌和刷新令牌。这就是我困惑的地方。 当访问令牌过期时,客户端应该使用授权码还是刷新令牌来获取新的访问令牌?如果您有授权代码,为什么要使用刷新令牌? 注:我并不是在找一个回答说“刷新令牌是可选的”,因为我正在为amazon-alexa编写这个服务器,这