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

PHP实现Fedex Rates and Transit Times API时遇401未授权错误

解决Fedex Rates API调用401 Unauthorized问题(PHP file_get_contents实现)

问题现象

用PHP的file_get_contents()调用Fedex Rates and Transit Times沙箱API时,返回HTTP/1.1 401 Unauthorized错误,但相同的访问令牌和账户ID在Postman里能正常请求。

代码中的核心问题

  1. 请求头格式错误:header参数应该是字符串数组,原代码把多个header写在一个字符串里,导致HTTP头解析异常,Authorization令牌无法被正确识别。
  2. 请求体格式不匹配:Fedex API要求接收JSON格式的请求体,但原代码把JSON解码后用http_build_query()转成了URL编码的表单数据,这不符合API的接收要求,同时会破坏原JSON的嵌套结构。
  3. 令牌占位符拼写错误:ACESS_TOKEN_HERE少写了一个C,应该是ACCESS_TOKEN_HERE(虽为占位符,但拼写错误可能导致复制时出错)。

修正后的代码

<?php
$url = "https://apis-sandbox.fedex.com/rate/v1/rates/quotes";

// 保留原始JSON字符串,无需解码后再处理
$rawdatajson = '{
  "accountNumber": {
    "value": "XXXXX7020"
  },
  "requestedShipment": {
    "shipper": {
      "address": {
        "postalCode": 65247,
        "countryCode": "US"
      }
    },
    "recipient": {
      "address": {
        "postalCode": 75063,
        "countryCode": "US"
      }
    },
    "pickupType": "DROPOFF_AT_FEDEX_LOCATION",
    "serviceType": "FEDEX_2_DAY",
    "rateRequestType": [
      "PREFERRED"
    ],
    "preferredCurrency": "CAD",
    "requestedPackageLineItems": [
      {
        "weight": {
          "units": "LB",
          "value": 10
        }
      }
    ]
  }
}';

// 替换为你的有效访问令牌
$accessToken = "YOUR_VALID_ACCESS_TOKEN";

$options = [
    'http' => [
        'method' => 'POST',
        // 每个请求头单独作为数组元素
        'header' => [
            "Authorization: Bearer {$accessToken}",
            "Content-Type: application/json",
            "x-customer-transaction-id: 624deea6-b709-470c-8c39-4b5511281490",
            "x-locale: en_US"
        ],
        // 直接使用原始JSON作为请求体
        'content' => $rawdatajson
    ]
];

$context = stream_context_create($options);

// 捕获可能的错误,方便调试
$resp_json = @file_get_contents($url, false, $context);
if ($resp_json === false) {
    $error = error_get_last();
    var_dump($error);
} else {
    $response_data = json_decode($resp_json);
    var_dump($response_data);
}
?>

关键修改说明

  • 请求头改为数组:确保每个HTTP头被正确解析,Authorization令牌能被Fedex服务器识别。
  • 请求体直接用原始JSON:避免解码再转码导致的格式错误,符合API要求的application/json格式。
  • Content-Type修正为application/json:原代码用了application/x-www-form-urlencoded,这和API接收格式不符。
  • 增加错误捕获:用@屏蔽警告,同时通过error_get_last()获取详细错误信息,方便调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:34:57