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 多个跟踪号码,您只会获得每个包裹的摘要。
根据 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 多个跟踪号码,您只会获得每个包裹的摘要。