UPS 追踪 API - JSON 正文格式?

UPS Tracking API - JSON body format?

根据 UPS 开发工具包文档的最新版本 "Tracking Web Services Developers Guide - January 04, 2016" 可以通过 REST / JSON 访问跟踪 API。但是,在他们的 PDF 文档中,关于 PDF 和互联网上的 JSON 方面的信息很少。我一辈子都想不出要传递的正确正文,每次我收到“请求格式不正确或操作未定义。重新提交前检查错误。 " 返回错误。关于 XML / SOAP 方面的信息有多年的价值,但我喜欢在这个特定项目上使用 JSON。任何人都对 API 的这个新功能有任何经验,JSON 主体应该是什么样子? JSON 正确验证,但显然不是 UPS 想要的。

{
 "UPSSecurity": {
  "UsernameToken": {
   "Username": " userHere",
   "Password": " passHere"
  }
 },
 "ServiceAccessToken": {
  "AccessLicenseNumber": "licNoHere"
 },
 "Request": {
  "RequestOption": "15"
 },
 "InquiryNumber": "1Z12345E0291980793",
 "TrackingOption": "02"
}

发布 UPS 支持人员回答的我自己的问题的答案。

您将 POST 以下 json 作为以下 API 端点的正文内容:

https://onlinetools.ups.com/json/Track

{
  "Security": {
    "UsernameToken": {
      "Username": "ups_username_here",
      "Password": "ups_password_here"
    },
    "UPSServiceAccessToken": {
      "AccessLicenseNumber": "ups_access_license_number_here"
    }
  },
  "TrackRequest": {
    "Request": {
      "RequestAction": "Track",
      "RequestOption": "activity"
    },
    "InquiryNumber": "1Z202Y36A898759591"
  }
}

这是我用来发出请求的 PHP 代码,使用 cURL:

<?php

$url = 'https://wwwcie.ups.com/rest/Track'; // TEST
// $url = 'https://onlinetools.ups.com/rest/Track'; // PROD

$ups_array = array(
    'UPSSecurity' => array(
        'UsernameToken' => array(
            'Username' => 'ups_username_here',
            'Password' => 'ups_password_here'
        ),
        'ServiceAccessToken' => array(
            'AccessLicenseNumber' => 'ups_access_license_number_here'
        )
    ),
    'TrackRequest' => array(
        'Request' => array(
            'RequestOption' => 1,
            'TransactionReference' => array(
                'CustomerContext' => 'Test 001'
            )
        ),
        'InquiryNumber' => 'ups_package_tracking_number_here' //'1ZE1XXXXXXXXXXXXXX'
    )
);

$params = json_encode($ups_array);  // TURN THE ARRAY INTO JSON

$results_json = scrape_page($url, $params);  // POST TO THE API

$results = json_decode($results_json, true);  // DECODE THE JSON AND TURN IT INTO AN ARRAY

print "<PRE><FONT COLOR=RED>"; print_r($results); print "</FONT></PRE>";

然后,对于实际的 cURL 函数,我有这个:

function scrape_page($url, $params) {

    $headers = array();
    $headers[] = 'Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept';
    $headers[] = 'Access-Control-Allow-Methods: POST';
    $headers[] = 'Access-Control-Allow-Origin: *';
    $headers[] = 'Content-Type: application/json';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,5);
    curl_setopt($ch, CURLOPT_TIMEOUT, 45);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
    $response = curl_exec($ch);

    // CHECK TO SEE IF WE GOT AN ERROR  
    // IF SO, FORMAT IT LIKE THIS   ::28::Operation timed out afterseconds  
    if ((curl_errno($ch)) && (curl_errno($ch) != 0)) {
        $response = "::".curl_errno($ch)."::".curl_error($ch);
    }

    // SEND THE RESPONSE BACK TO THE SCRIPT
    return $response;

}

https://www.ups.com/track/api/Track/GetStatus 你可以 post 一个 json 喜欢

{
  "Locale": "da_DK",
  "TrackingNumber": ["enter your number here" ]
}

你会得到一个漂亮的 json 结构返回显示包裹的当前和以前的位置

如果您 post 多个跟踪号码,您只会获得每个包裹的摘要。