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

PHP调用TPR FMCSA API遇401错误,Postman请求正常

向TPR FMCSA注册表提交数据时PHP代码返回401未授权的问题排查

核心错误:JWT过期时间设置错误

你的代码里JWT payload的exp字段错误地赋值为$nbf(当前时间),导致生成的JWT刚创建就过期,接口直接返回401。

修正这行代码:

$payload = [
    "nbf" => $nbf,
    "exp" => $exp, // 改为之前定义的$current_time + 1200,而不是$nbf
    "iss" => $issuer,
    // "sub" => $subject
];

其他可能的排查方向

  1. 私钥格式兼容性
    从PFX文件提取的私钥可能需要转换为PEM格式才能被JWT库正确识别,尝试添加私钥导出步骤:
openssl_pkcs12_read($pfxContents, $cert_info, $pfxPassword);
// 导出私钥为PEM格式
openssl_pkey_export($cert_info['pkey'], $pem_private_key, $pfxPassword);
// 使用PEM格式的私钥生成JWT
$jwt = JWT::encode($payload, $pem_private_key, 'RS256');
  1. CURL请求配置检查
  • 确保请求头格式正确,Authorization字段没有多余空格
  • 测试环境中可暂时关闭SSL验证(生产环境请勿使用):
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  1. 时区与时间同步
    确认你的服务器时间与TPR FMCSA接口服务器时间同步,time()返回的是UTC时间戳,若服务器时区非UTC,可改用gmdate('U')获取标准UTC时间戳,避免nbf/exp时间校验失败。

  2. 代码返回逻辑错误
    最后一行return $this->withJson($response, $res);中的$response未定义,应改为return $this->withJson($res);,否则会导致自身应用的响应错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:18:14