Я работаю над API Flight of arzoo. Сервер должен получать опубликованные данные в простом запросе POST. Для этого я использую PHP cURL. В документе API явно указано, что данные должны быть отправлены в следующем формате:
<AvailRequest> <Trip>ONE</Trip> <Origin>BOM</Origin> <Destination>NYC</Destination> <DepartDate>2013-09-15</DepartDate> <ReturnDate>2013-09-16</ReturnDate> <AdultPax>1</AdultPax> <ChildPax>0</ChildPax> <InfantPax>0</InfantPax> <Currency>INR</Currency> <Preferredclass>E</Preferredclass> <Eticket>true</Eticket> <Clientid>77752369</Clientid> <Clientpassword>*AB424E52FB5ASD23YN63A099A7B747A9BAF61F8E</Clientpassword> <Clienttype>ArzooINTLWS1.0</Clienttype> <PreferredAirline></PreferredAirline> </AvailRequest>
Я взял указанный выше код в переменной $ xml. Мой код PHP cURL выглядит следующим образом:
$URL = "http://59.162.33.102:9301/Avalability"; //setting the curl parameters. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$URL); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml')); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); if (curl_errno($ch)) { // moving to display page to display curl errors echo curl_errno($ch) ; echo curl_error($ch); } else { //getting response from server $response = curl_exec($ch); print_r($response); curl_close($ch); }
Я ничего не получаю в ответ. Я говорил об этом же с поставщиком API, но они нашли пустой запрос в своем журнале. Я что-то пропустил с моего конца. Ваш ответ будет оценен. Спасибо.
После того, как немного поработал с API-интерфейсом API Arzoo, я наконец нашел решение, и код просто отлично работает со мной. Вот полный рабочий код:
//Store your XML Request in a variable $input_xml = '<AvailRequest> <Trip>ONE</Trip> <Origin>BOM</Origin> <Destination>JFK</Destination> <DepartDate>2013-09-15</DepartDate> <ReturnDate>2013-09-16</ReturnDate> <AdultPax>1</AdultPax> <ChildPax>0</ChildPax> <InfantPax>0</InfantPax> <Currency>INR</Currency> <PreferredClass>E</PreferredClass> <Eticket>true</Eticket> <Clientid>777ClientID</Clientid> <Clientpassword>*Your API Password</Clientpassword> <Clienttype>ArzooINTLWS1.0</Clienttype> <PreferredAirline></PreferredAirline> </AvailRequest>';
Теперь я внес небольшие изменения в вышеуказанную декларацию curl_setopt следующим образом:
$url = "http://59.162.33.102:9301/Avalability"; //setting the curl parameters. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // Following line is compulsary to add as it is: curl_setopt($ch, CURLOPT_POSTFIELDS, "xmlRequest=" . $input_xml); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300); $data = curl_exec($ch); curl_close($ch); //convert the XML result into array $array_data = json_decode(json_encode(simplexml_load_string($data)), true); print_r('<pre>'); print_r($array_data); print_r('</pre>');
Вот именно код работает для меня совершенно нормально. Я очень благодарен @hakre & @Lucas за их замечательную поддержку.
Предыдущий anwser отлично работает. Я бы просто добавил, что вам не нужно указывать CURLOPT_POSTFIELDS как "xmlRequest=" . $input_xml
"xmlRequest=" . $input_xml
чтобы прочитать ваш $ _POST. Вы можете использовать file_get_contents('php://input')
чтобы получить исходные данные в виде простого XML.