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

无法从GoDaddy Poynt获取Access Token:JWT无效问题求助

解决GoDaddy Poynt获取Access Token时JWT无效的问题

以下是针对你代码中问题的修正点:

1. 签名算法不匹配

你使用的是RSA私钥,但签名算法指定为HS512(对称哈希算法),RSA密钥对应的正确算法应该是RS512(非对称签名算法),这是JWT无效的核心原因之一。

修正后的JWT编码代码:

$jwt = JWT::encode(
    $request_data,
    $secret_key,
    'RS512' // 替换为RS512算法
);

2. CURL请求头设置错误

你误用CURLOPT_HEADER来设置请求头,该参数的作用是控制是否返回响应头,正确设置请求头需使用CURLOPT_HTTPHEADER,并传入数组格式的头部信息。

修正后的CURL请求头设置:

curl_setopt($curl_obj, CURLOPT_HTTPHEADER, [
    "Accept: application/json",
    "api-version: 1.2",
    "Content-Type: application/x-www-form-urlencoded"
]);

3. OAuth参数名不符合标准

POST参数中的grantType不符合OAuth规范,正确参数名应为grant_type。

修正后的POST字段:

curl_setopt($curl_obj, CURLOPT_POSTFIELDS,
    "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=" . $jwt
);

4. 额外验证点

  • 确认RSA私钥格式正确,无多余换行、空格,密钥内容完整。
  • 检查iat(签发时间)和exp(过期时间)的时间戳,确保与Poynt服务器时间偏差在5分钟内。
  • 验证jti的长度是否符合要求,当前bin2hex(random_bytes(32))生成的64字符格式是符合标准的。

修正后的关键代码片段:

// JWT编码部分
$jwt = JWT::encode(
    $request_data,
    $secret_key,
    'RS512'
);

// CURL请求部分
$curl_obj = curl_init();
curl_setopt($curl_obj, CURLOPT_POST, 1);
curl_setopt($curl_obj, CURLOPT_URL, "https://services.poynt.net/token");
curl_setopt($curl_obj, CURLOPT_HTTPHEADER, [
    "Accept: application/json",
    "api-version: 1.2",
    "Content-Type: application/x-www-form-urlencoded"
]);
curl_setopt($curl_obj, CURLOPT_POSTFIELDS,
    "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=" . $jwt
);
curl_setopt($curl_obj, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl_obj);
curl_close($curl_obj);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:25:56