Skip to main content
版本: 1.0.x

访问令牌

为了系统安全的目的,在发送交易请求之前,您需要完成两个步骤。

步骤 1. 获取随机代码

在请求流程的开始,您应该从我们的服务中获取一个随机代码。

请求

API URL: /merchant/random_code

Note

✅ 必填 ⭕ 可選 ❌ 不適用

标头内容
Content-Typeapplication/json
参数类型必填说明
user_id字符串商户识别码

请求示例

function get_random_code()
{
global $user_id, $base_url;

$url = "{$base_url}/merchant/random_code";
$params = json_encode(['user_id' => $user_id]);
$header = ['Content-Type: application/json'];
$response = send_curl_request($url, $params, $header);
$response = json_decode($response, true);

return $response['data']['code'];
}

function send_curl_request($url, $body, $header): string
{
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => 'utf-8',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $body,
CURLOPT_HTTPHEADER => $header,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0',
]);
$response = curl_exec($curl);
curl_close($curl);

return $response;
}

响应

参数类型必填说明
code字符串用于获取访问令牌的随机代码。请注意,它仅在 5分钟 内有效。
expires_in整数随机代码的过期时间(以秒为单位)
expires_at整数随机代码的过期时间(时间戳))

响应示例

{
"code": "1000",
"message": "Accepted",
"data": {
"code": "VL4hrMLmM3THd2iQDNOoa45cGZhx2zH7", // here is the random code
"expires_in": 300,
"expires_at": 1704699776
}
}

步骤 2. 获取访问令牌

获取随机代码后,您需要发送第二个请求来获取访问令牌,然后将其放入您发送给 PTS 的每个交易请求中。访问令牌将一直有效,直到响应中提供的到期时间到达。这意味着您应该在您的服务中缓存访问令牌,并在访问令牌到期时再次执行这两个步骤的请求。

注意

您应该实现某种机制来保存访问令牌并在发送交易请求之前检测其是否已过期。

请求

API URL: /merchant/token

标头内容
Content-Typeapplication/json
参数类型必填说明
user_id字符串商户识别码
hash字符串请按照下面的提示生成
提示

请按照给定的顺序,不使用任何分隔符或空格,将 random_code + user_id + safecode 连接在一起。然后将连接的字符串放入 SHA256 哈希函数中以获取哈希代码。

请求示例

function get_token(): string
{
global $user_id, $safecode, $base_url;

$url = "{$base_url}/merchant/token";
$params = json_encode([
'user_id' => $user_id,
'hash' => hash('SHA256', get_random_code().$user_id.$safecode)
]);
$header = ['Content-Type: application/json'];
$response = send_curl_request($url, $params, $header);
$response = json_decode($response, true);
$data = $response['data'];

return $data['token_type'].' '.$data['access_token'];
}

function send_curl_request($url, $body, $header): string
{
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => 'utf-8',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $body,
CURLOPT_HTTPHEADER => $header,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0',
]);
$response = curl_exec($curl);
curl_close($curl);

return $response;
}

响应

参数类型必填说明
access_token字符串要放入您的请求头中的令牌。请注意,它仅在 60分钟 内有效。
token_type字符串令牌的类型
expires_in整数令牌的过期时间(以秒为单位)
expires_at整数令牌的过期时间(时间戳)

响应示例

{
"code": "1000",
"message": "Accepted",
"data": {
"access_token": "cyJacasxzxc...",
"token_type": "bearer",
"expires_in": 300,
"expires_at": 1704699776
}
}