Нет результатов при использовании веб-API

Я пытаюсь получить XML-страницу из калькулятора тарифов Почтовой службы США (USPS), используя PHP. Вот код, который я использую (с заменой логина и пароля API, конечно):

<?
$api = "http://production.shippingapis.com/ShippingAPI.dll?API=RateV4&XML=<RateV4Request ".
       "USERID=\"MYUSERID\" PASSWORD=\"MYPASSWORD\"><Revision/><Package ID=\"1ST\">".
       "<Service>FIRST CLASS</Service><FirstClassMailType>PARCEL</FirstClassMailType>".
       "<ZipOrigination>12345</ZipOrigination><ZipDestination>54321</ZipDestination>".
       "<Pounds>0</Pounds><Ounces>9</Ounces><Container/><Size>REGULAR</Size></Package></RateV4Request>";

$xml_string = file_get_contents($api); 

$xml = simplexml_load_string($xml_string);
?>

Довольно просто. Однако он никогда ничего не возвращает. Я могу вставить URL-адрес прямо в адресную строку моего браузера:

http://production.shippingapis.com/ShippingAPI.dll?API=RateV4&XML=<RateV4RequestUSERID="MYUSERID" PASSWORD="MYPASSWORD"><Revision/><Package ID="1ST"><Service>FIRST CLASS</Service><FirstClassMailType>PARCEL</FirstClassMailType><ZipOrigination>12345</ZipOrigination><ZipDestination>54321</ZipDestination><Pounds>0</Pounds><Ounces>9</Ounces><Container/><Size>REGULAR</Size></Package></RateV4Request>

И он возвращает нужный мне XML, поэтому я знаю, что URL действителен. Но я не могу захватить его с помощью PHP. Любая помощь будет принята с благодарностью. Заранее спасибо.

1 ответ

Одна вещь состоит в том, что вам нужно URL кодировать XML, который вы отправляете в сервис. Браузер сделает это автоматически, но file_get_contents не будет.

Попробуй это:

 $param = urlencode("<RateV4Request ".
   "USERID=\"MYUSERID\" PASSWORD=\"MYPASSWORD\"><Revision/><Package ID=\"1ST\">".
   "<Service>FIRST CLASS</Service><FirstClassMailType>PARCEL</FirstClassMailType>".
   "<ZipOrigination>12345</ZipOrigination><ZipDestination>54321</ZipDestination>".
   "<Pounds>0</Pounds><Ounces>9</Ounces><Container/><Size>REGULAR</Size></Package></RateV4Request>");

 $api = "http://production.shippingapis.com/ShippingAPI.dll?API=RateV4&XML="
        .$param;

 ... then the rest of the code

Если это не помогает, убедитесь, что у вас активированы отчеты об ошибках, чтобы вы получили ответ, если file_get_contents есть ошибка.

Другие вопросы по тегам