PHP调用FedEx OAuth2 Rate API遇422 INVALID.INPUT.EXCEPTION错误求助
解决FedEx OAuth2 Rate API调用返回422无效输入错误
以下是针对你遇到的INVALID.INPUT.EXCEPTION错误的具体解决建议:
1. 确认API环境与账号匹配
如果使用的是测试账号,必须调用沙箱环境地址:
https://apis-sandbox.fedex.com/rate/v1/rates/quotes
生产账号才使用https://apis.fedex.com,环境与账号不匹配会直接触发无效输入错误。
2. 补充必填字段
FedEx Rate API v1存在多个必填字段,你的payload缺少核心项:
- serviceType:必须指定具体运输服务类型,比如
FEDEX_GROUND、INTERNATIONAL_PRIORITY等,这是API要求的必填参数。 - packagingType:每个包裹必须指定包装类型,比如
YOUR_PACKAGING(自定义包装)或FEDEX_BOX(FedEx标准箱)。
修改后的payload示例:
$payload["requestedShipment"]["serviceType"] = "FEDEX_GROUND"; $payload["requestedShipment"]["requestedPackageLineItems"][0] = [ "weight" => [ "units" => "KG", "value" => "10" ], "packagingType" => "YOUR_PACKAGING" // 新增必填字段 ];
3. 完善地址信息
加拿大国内运输的地址建议补充provinceCode(省份代码),避免地址验证失败:
$payload["requestedShipment"]["shipper"]["address"]["provinceCode"] = "ON"; // L4Z1X3对应安大略省 $payload["requestedShipment"]["recipient"]["address"]["provinceCode"] = "BC"; // V1Y5E1对应不列颠哥伦比亚省
4. 优化请求配置
- 移除
addslashes:json_encode会自动处理字符串转义,使用addslashes会导致JSON格式错误,直接用json_encode($payload)即可。 - 生产环境开启SSL验证:测试环境暂时关闭
CURLOPT_SSL_VERIFYHOST和CURLOPT_SSL_VERIFYPEER没问题,但生产环境必须设为1,保证请求安全。
5. 获取详细错误信息
添加X-FedEx-Debug: true请求头,让API返回更具体的错误详情(比如明确指出哪个字段无效):
$headers = [ 'Content-Type: application/json', 'Authorization: Bearer '.$token, 'X-locale: en_US', 'X-FedEx-Debug: true' // 新增调试头 ];
内容的提问来源于stack exchange,提问作者cjrb
相关产品推荐
相关产品推荐

