2016-05-20 13 views
2

В настоящее время используется тестовая учетная запись разработчика Sabre Dev Studio и пытается использовать их REST Api - Instaflights_Search.HTTP/1.1 400 Bad Request Saber REST Api

Я создаю аутентификацию и получаю токен доступа, но проблема возникает, когда я пытаюсь отправить запрос. Я создаю заголовки, используя curl и php.

function callRestApi($url,$access_token) { 

    $ch = curl_init(); 

    $header = array(); 
    $header[] = "Authorization: Bearer " .$access_token; 
    $header[] = "Accept: application/json"; 
    $header[] = 'Content-Type: application/json'; 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
    curl_setopt($ch, CURLOPT_HTTPGET, 1); 
    curl_setopt($ch, CURLOPT_VERBOSE, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    $result = curl_exec($ch); 
    curl_close($ch); 
    return json_decode($result,true); 
} 


$url = "https://api.test.sabre.com/v1/shop/flights?origin=JFK&destination=LAX&departuredate=2016-05-30&returndate=2016-05-31"; 

$access_token = callForToken(); 

$server_response = callRestApi($url,$access_token); 

Ответ Сэйбер:

array(5) { 
    ["status"]=> 
    string(12) "NotProcessed" 
    ["type"]=> 
    string(10) "Validation" 
    ["errorCode"]=> 
    string(30) "ERR.2SG.CLIENT.INVALID_REQUEST" 
    ["timeStamp"]=> 
    string(29) "2016-05-19T22:36:51.041-05:00" 
    ["message"]=> 
    string(60) "Request is invalid: The request should have the JSON payload" 
    } 

И заголовок запроса HTTP 1/1 гласит:

* Hostname was found in DNS cache 
* Trying 151.193.52.94... 
* Connected to api.test.sabre.com (151.193.52.94) port 443 (#0) 
* successfully set certificate verify locations: 
* CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none 
* SSL connection using TLSv1.2/AES256-SHA 
* Server certificate: 
* subject: C=US; ST=Texas; L=Southlake; O=Sabre, Inc.; OU=Internet Services; CN=api.test.sabre.com 
* start date: 2015-02-25 00:00:00 GMT 
* expire date: 2017-03-21 23:59:59 GMT 
* subjectAltName: api.test.sabre.com matched 
* issuer: C=US; O=Symantec Corporation; OU=Symantec Trust Network; CN=Symantec Class 3 Secure Server CA - G4 
* SSL certificate verify ok. 
    > GET /v1/shop/flights?origin=JFK&destination=LAX&departuredate=2016-05-30&returndate=2016-05-05&onlineitinerariesonly=n&limit=10&offset=1&eticketsonly=n&sortby=totalfare&order=asc&sortby2=departuretime&order2=asc&pointofsalecountry=US HTTP/1.1 
Host: api.test.sabre.com 
Authorization: Bearer T1FNEWIhYyxjzQJ/Fh4oPfgkjU4s+R/xAxglSqD2oC4kYcCAnPcIv+bbV9sTu3KHxdpQ+zRKUsTGmpfhQT//Djx+3yDNZUcypKrbjzIzjVJvDPI+PyH5bT4F88Gcse//7hjcrz5sCRXkqwqjb1ceaBhGV2hr0t47XwBcjEvPg2I92FtFsqNw7V8NrcPfBVFxnZAbqESJ+zUQH6mSeaWa1h3Rc04g4szipQhHWDnR+sneH8ePdHKPQaoX3M44YMRvviOV8yEBYwTg** 
Accept: application/json 
Content-Type: application/json 

< HTTP/1.1 400 Bad Request 
< Date: Fri, 20 May 2016 03:15:28 GMT 
< Content-Type: application/json 
< Content-Length: 207 
< 
* Connection #0 to host api.test.sabre.com left intact 

Любые идеи, что может быть проблема с заголовком?

EDIT на 23/05/2016 Исправленная версия для построения заголовка запроса ниже:

 function callRestApi($url,$access_token) { 

     $header2 = array(
     'Authorization : Bearer '.$access_token, 
     'Accept : */*' 
    ); 

     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); 
     curl_setopt($ch, CURLOPT_VERBOSE, true); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, $header2); 
     $result = curl_exec($ch); 
     curl_close($ch); 
     return json_decode($result,true); 
    } 
+1

Вы пытались сделать запрос другим методом/программой/фреймворком, чтобы проверить, одобрен ли запрос? Может быть, попробовать с почтальоном или что-то в этом роде ... Пришел сюда fron DevRant haha ​​ – PekosoG

+0

devRant делает мир лучше, чем одно недовольное напыщенное время :) Спасибо за предложение, я попробую это и дам вам знать, как это сделать идет! –

ответ

1

вы смотрели на PHP примера код из Saber GitHub репо?

https://github.com/SabreDevStudio/SACS-Php

она использует IntaFlights и завиток, поэтому, возможно, обеспечивает подход к API, который вы тестируете, и вашу среду.

Не стесняйтесь добавлять проблему, если она не работает для вас.

+0

Спасибо, что направили меня в свой проект github. Я смог использовать функцию, где они строили свой заголовок, и проблема, похоже, была с моим curl_setopt. Я отправил исправленную версию в исходный вопрос для всех, кого это интересует. Еще раз спасибо! –

0

Ну, я заметил две вещи от летучей мыши, который может направить вас в правильном направлении:

  1. В сообщении об ошибке в ответе Sabre упоминается, что отсутствует полезная нагрузка JSON. Вы целенаправленно опускаете данные как часть своего запроса? (Некоторые службы плохо написаны и ожидают тело, даже если оно пустое («{}»).
  2. Возможно, их API нарушен? Если вы посмотрите на HTTP-запрос (во втором блоке), обратите внимание, как изменился URL-адрес? Указанная переменная даты возврата недействительна (вы предоставили «2016-05-31», и она изменилась (auto redirect?) До «2016-05-315». То есть, если вы не скопировали/вставляли два разных запроса.

Надеется, что это помогает.

+0

1, Нецелесообразно опуская данные. Убедитесь, что вы включили все необходимые поля, поэтому я не уверен, почему я получаю сообщение об отсутствии полезной нагрузки JSON. 2. Извините, что проблема с датой была опечаткой от копирования и вставки, не понимала, что это было в моем посте, пока вы не указали это. (Также просто отредактировал сообщение, чтобы удалить его, чтобы не запутать кого-либо еще.) По большей части их API, похоже, не сломался, потому что он работает на своих тестовых серверах и в приложениях в своей демонстрационной галерее. Еще раз спасибо, что нашли время ответить! –

+0

Gotcha. В этом случае я предлагаю то же самое, что сказал Пекосо выше - попробуйте создать запрос в другом инструменте (например,Почтальон), и посмотреть, есть ли у вас такая же проблема. – Martin

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

  • Нет связанных вопросов^_^