You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何完成OAuth认证并在API调用中使用Token

PHP实现OAuth2 Client Credentials认证及API调用示例

一、获取Access Token的PHP代码

下面是对应你提供的curl请求的PHP实现,采用Client Credentials模式获取token:

<?php
// 认证接口地址
$tokenUrl = 'https://account.xyxyxyxyx.com/oauth2/token';
// 客户端ID和密钥(对应curl中的-u参数)
$clientId = 'xxxxxx';
$clientSecret = 'yyyyyyyyyy';
// 请求参数
$postData = [
    'grant_type' => 'client_credentials',
    'scope' => 'read:events'
];

// 初始化curl
$ch = curl_init($tokenUrl);

// 设置curl选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 启用Basic认证,传入clientId:clientSecret
curl_setopt($ch, CURLOPT_USERPWD, "$clientId:$clientSecret");
// 设置为POST请求
curl_setopt($ch, CURLOPT_POST, true);
// 传递表单数据
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
// 设置Content-Type头
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/x-www-form-urlencoded'
]);

// 执行请求并获取响应
$response = curl_exec($ch);
// 检查curl错误
if(curl_errno($ch)) {
    die('Curl错误: ' . curl_error($ch));
}
// 关闭curl
curl_close($ch);

// 解析JSON响应
$tokenData = json_decode($response, true);
// 检查是否成功获取token
if(!isset($tokenData['access_token'])) {
    die('获取token失败: ' . $response);
}

// 提取access token
$accessToken = $tokenData['access_token'];
echo "获取到的Access Token: " . $accessToken . PHP_EOL;
?>

二、使用Access Token调用API

获取到token后,标准做法是将其放在Authorization请求头中,采用Bearer认证方案,而非作为URL参数(部分API可能支持参数传递,但Bearer头是OAuth2的规范用法)。

以下是使用token调用API的示例(以GET请求为例):

<?php
// 假设你要调用的API接口地址
$apiUrl = 'https://api.xyxyxyxyx.com/events';

// 初始化curl
$ch = curl_init($apiUrl);

// 设置curl选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 设置Authorization头
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $accessToken"
]);

// 执行请求并获取响应
$apiResponse = curl_exec($ch);
// 检查curl错误
if(curl_errno($ch)) {
    die('API调用Curl错误: ' . curl_error($ch));
}
// 关闭curl
curl_close($ch);

// 处理API响应
echo "API响应结果: " . $apiResponse . PHP_EOL;
?>

补充说明

  • 如果目标API是POST请求,只需添加CURLOPT_POST和CURLOPT_POSTFIELDS选项传递请求体即可,Authorization头的设置方式保持不变。
  • 注意token的有效期,通常认证响应中会包含expires_in字段(单位为秒),需在token过期前重新获取新的token。

内容的提问来源于stack exchange,提问作者user2471951

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:07:21