Я использую cURL для отправки POST-информации в калькулятор тарифов доставки usps.
$info = "<?xml version='1.0' encoding='UTF-8'?>
<RateV4Request USERID='xxxx'>
<Package ID='$aucid'>
<Service>Priority</Service>
<ZipOrigination>xxxx</ZipOrigination>
<ZipDestination>$zip</ZipDestination>
<Size>$size</Size>
<Pounds>$pounds</Pounds>
<Ounces>$ounces</Ounces>
<Container>RECTANGULAR</Container>
<Width>$width</Width>
<Length>$length</Length>
<Height>$height</Height>
<SpecialServices><SpecialService>108</SpecialService></SpecialServices>
</Package>
</RateV4Request>";
$array = array("API" => "RateV4", "XML" => $info);
$link = "http://production.shippingapis.com/ShippingAPI.dll";
curl_setopt($ch, CURLOPT_URL,$link);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$array);
$answer=curl_exec($ch);
echo $answer;
curl_close($ch);
Когда я подписался на веб-инструменты USPS, было отправлено письмо с USERID (я заменил его на xs из-за его деликатного характера).
В том же письме было указано, что расчет тарифов разрешен.
Вот ошибка, которая возвращается:
80040B19XML Синтаксическая ошибка:
Пожалуйста, проверьте запрос XML, чтобы увидеть, можно ли его проанализировать .USPSCOM :: DoAuth
Я пошел вперед и взял XML, который отражен, и подключил его к xmlvalidation.com
и он не нашел ошибок. Я также попробовал это без <?xml version="1.0" encoding="UTF-8">
линия наверху.
PHP превращает ID пакета в научную нотацию, потому что это просто большое «число», поэтому вам нужно помешать этому, сделав его строкой.
Вместо этого: <Package ID='$aucid'>
Попробуй это: <Package ID=\"".$aucid."\">
Вам также может понадобиться обернуть весь этот XML в rawurlencode
Других решений пока нет …