Sage 200 原生 API:使用 PHP 和 cURL 授权访问
2024-03-04 22:11:50
使用 PHP 和 cURL 授权访问 Sage 200 原生 API
简介
Sage 200 原生 API 是一组功能强大的工具,可让你访问和管理 Sage 200 数据。要利用这些 API 的全部潜力,你必须授权你的应用程序。本文将提供一个分步指南,介绍如何使用 PHP 和 cURL 授权访问 Sage 200 原生 API。
第一步:获取客户端 ID 和客户端密钥
首先,你需要从 Sage Developer Portal 获取客户端 ID 和客户端密钥。这些凭据用于识别你的应用程序,并授予其访问 API 的权限。
第二步:设置授权 URL
使用 Sage 提供的授权 URL 并设置以下参数:
- 客户端 ID
- 响应类型(设置为“code”)
- 状态(设置为唯一值)
- 作用域(设置一组权限)
- 回调 URI(你的应用程序将重定向到的 URL)
第三步:请求授权代码
使用 cURL 向 Sage 发出请求,将其重定向到授权 URL。用户将被提示授权你的应用程序,并向你提供授权代码。
第四步:获取访问令牌
使用授权代码、客户端 ID、客户端密钥和回调 URI 向 Sage 请求访问令牌。这将为你提供一个访问令牌,用于对 API 发出请求。
第五步:使用访问令牌进行 API 调用
在请求标头中包含访问令牌,即可使用 API。确保访问令牌有效且未过期。
代码示例
以下代码示例演示了如何使用 PHP 和 cURL 授权访问 Sage 200 原生 API:
api.php
// 导入必要的类
use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;
// 创建 SageAPI 类
class SageAPI {
// 成员变量
private $clientId;
private $clientSecret;
private $oAuthAuthorizeURL = 'https://id.sage.com/authorize?audience=s200ukipd/sage200';
private $oAuthAccessTokenURL = 'https://id.sage.com/oauth/token';
private $accessToken;
private $refreshToken;
private $debug = true;
// 构造函数
function __construct($clientId, $clientSecret) {
$this->clientId = $clientId;
$this->clientSecret = $clientSecret;
}
// 获取授权 URL
public function getAuthoriseURL($callback) {
$authoriseURL = $this->oAuthAuthorizeURL;
$authoriseURL .= '&response_type=code';
$authoriseURL .= '&client_id=' . $this->clientId;
$authoriseURL .= '&state=Sage';
$authoriseURL .= '&scope=openid%20profile%20email%20offline_access';
$authoriseURL .= '&redirect_uri=' . urlencode($callback);
return $authoriseURL;
}
// 获取访问令牌
public function getAccessToken($code, $callback) {
if ($this->accessToken) {
return $this->accessToken;
}
$params = [
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret,
'code' => $code,
'grant_type' => 'authorization_code',
'redirect_uri' => $callback
];
// 使用 GuzzleHTTP 发送请求
$client = new Client();
$response = $client->post($this->oAuthAccessTokenURL, [
RequestOptions::FORM_PARAMS => $params
]);
// 解析响应
$result = json_decode($response->getBody(), true);
// 保存访问令牌和刷新令牌
$this->accessToken = $result['access_token'];
$this->refreshToken = $result['refresh_token'];
// 返回响应
return $result;
}
// 使用访问令牌进行 API 调用
public function makeAPICall($url, $method, $data = []) {
$headers = [
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $this->accessToken
];
// 使用 GuzzleHTTP 发送请求
$client = new Client();
$response = $client->request($method, $url, [
RequestOptions::HEADERS => $headers,
RequestOptions::JSON => $data
]);
// 返回响应
return json_decode($response->getBody(), true);
}
}
callback.php
// 定义客户端 ID 和客户端密钥
define('SAGE_CLIENT_ID', 'YOUR_CLIENT_ID');
define('SAGE_CLIENT_SECRET', 'YOUR_CLIENT_SECRET');
// 创建 SageAPI 对象
$client = new SageAPI(SAGE_CLIENT_ID, SAGE_CLIENT_SECRET);
// 回调 URL
$callbackURL = 'https://example.com/callback.php';
// 检查授权代码是否存在
if (!isset($_GET['code'])) {
// 重定向到授权 URL
$authoriseURL = $client->getAuthoriseURL($callbackURL);
header("Location: " . $authoriseURL);
exit;
} else {
// 获取访问令牌
$accessToken = $client->getAccessToken($_GET['code'], $callbackURL);
// 输出访问令牌信息
echo '<pre>';
print_r($accessToken);
echo '</pre>';
}
故障排除
如果你在授权过程中遇到问题,请尝试以下故障排除提示:
- 确保你的客户端 ID 和客户端密钥正确无误。
- 检查你的回调 URL 是否在 Sage Developer Portal 中已注册。
- 确保你的重定向 URI 与你向 Sage 发送的重定向 URI 相匹配。
- 确保你的代码正在尝试使用重定向中返回的代码请求访问令牌。
常见问题解答
1. 如何获取 Sage Developer Portal 中的客户端 ID 和客户端密钥?
在 Sage Developer Portal 创建一个应用程序,即可获取客户端 ID 和客户端密钥。
2. 如何设置回调 URL?
回调 URL 是你的应用程序在授权后将重定向到的 URL。它必须在 Sage Developer Portal 中注册。
3. 如何使用访问令牌进行 API 调用?
在请求标头中包含访问令牌,即可使用 API。确保访问令牌有效且未过期。
4. 如何刷新访问令牌?
刷新令牌可用于刷新过期的访问令牌。通过向 Sage 发送带有刷新令牌的请求,即可刷新访问令牌。
5. 在哪里可以找到 Sage 200 原生 API 的文档?
Sage 200 原生 API 的文档可在 Sage Developer Portal 中找到。