2016-02-26 2 views
2

Согласно последнему выпуску документации для разработчиков ИБП «Отслеживание руководства для разработчиков веб-сервисов - 04 января 2016 года», API отслеживания можно получить через REST/JSON. Тем не менее, в их документации по PDF-документам очень мало информации о стороне JSON как в PDF, так и в interwebs. Я не могу понять, для жизни меня правильный орган, чтобы пройти, и каждый раз, когда я получаю «Запрос не является корректным или операция не определена. Обзор ошибок перед повторной отправкой.« ошибка назад , Есть много информации о стороне XML/SOAP, но я бы хотел использовать JSON в этом конкретном проекте. У кого-нибудь есть опыт работы с этой новой функцией их API и что должно выглядеть тело JSON? JSON проверяет правильность, но, очевидно, не тот, который ИБП ищет.ИБП Tracking API - формат корпуса JSON?

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

ответ

3

Проводка ответ на свой вопрос ответили на поддержку ИБП.

Вы выложите следующий 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" 
 
    } 
 
}

+0

Но как же сделать запрос в первую очередь? – djack109

+0

@ djack109 Я добавил точку доступа API и метод POST к ответу. – Dan

+0

Спасибо за это. Но как вы на самом деле получаете данные на этот URL. Если данные POST - это имя (-ы) имени формы, если GET (URL) Data - это запрос? – djack109

0

Вот является 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; 

} 
Смежные вопросы