Я пытаюсь разработать калькулятор ставок USPS для корзины, которую я создаю в codeigniter. У меня проблемы с получением успешных ответов от тестового сервера USPS и их API. Я позвонил со своими проблемами, и, по-видимому, они не хотят оказывать какую-либо поддержку любому, кто пытается создать собственное решение. Чтобы сделать это еще более запутанным, они сказали мне, что все, что мне нужно знать, можно найти в их Руководство по разработке v3.pdf, но в нем указано:
Шаг 3. Запустите «стандартный» тест с тестового сервера
Применимые API: все
Следующим шагом является тестирование интерфейсов API. Как зарегистрированный пользователь API вы получили доступ к тестовому серверу API доставки. Важное примечание: тестовый сервер настроен так, чтобы принимать только подмножество предопределенных транзакций XML и возвращать предопределенные ответы XML, указанные в этом документе.
Если вы уже успешно протестировали свой API и имеете доступ к рабочему серверу, пропустите этот шаг и перейдите к шагу 5. Запустите «образцы» с рабочего сервера.
Проблема здесь в том, что они не предоставляют ни одного из подмножеств предопределенных транзакций XML, как указано. Они предоставляют тестовые образцы, но, похоже, они предназначены для рабочего сервера, доступ к которому вы получаете только после успешного тестирования на тестовом сервере (в приведенном ниже сценарии у меня есть один из этих образцов, который я безуспешно пробовал). Поэтому я ссылаюсь на Калькуляторы тарифов USPS v1-5-1. pdf, где вам дадут образцы конкретных тестовых транзакций. В лучшем случае я бы получил сообщение об ошибке:
<Error>
<Number>80040b1a</Number>
<Description>Authorization failure. You are not authorized to connect to this server. </Description>
<Source>UspsCom:: DoAuth</Source>
</Error>
Я знаю, что люди решили это, здесь есть несколько закрытых вопросов, подобных этому, но ни один из них не показывает решения. Мой код следует:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Usps_curl extends CI_Controller {
public function index()
{
$devurl = "testing.shippingapis.com/ShippingAPITest.dll";
$puburl = "https://secure.shippingapis.com/ShippingAPITest.dll";
$service = "RateV4";
// ALTHOUGH THE USPS DEV GUIDE V3 SAYS
// $xml = '<RateV4Request USERID="225XXXXX5943">
// <Revision>2</Revision>
// <Package ID="1">
// <Service>PRIORITY</Service>
// <Container>FLAT RATE BOX</Container>
// <ZipOrigination>20012</ZipOrigination>
// <ZipDestination>20007</ZipDestination>
// <Pounds>1</Pounds>
// <Ounces>0.0</Ounces>
// <Size>REGULAR</Size>
// </Package>
// </RateV4Request>';
// THIS IS AN EXACT EXAMPLE PROVIDED IN THE USPS DEV GUIDE V3 - BUT I BELIEVE IT IS ONE OF THE FOUR "CANNED" TEST FOR THE PRODUCTION SERVER
//$xml = '<AddressValidateRequest USERID="225XXXXX5943">
// <Address ID="0">
// <Address1></Address1>
// <Address2>6406 Ivy Lane</Address2>
// <City>Greenbelt</City>
// <State>MD</State>
// <Zip5></Zip5>
// <Zip4></Zip4>
// </Address>
// </AddressValidateRequest>';
// THIS IS THE SAMPLE CODE FROM USPS RATE CALCULATORS V1-5-1 PDF
$xml = rawurlencode('<RateV4Request USERID="225XXXXX5943">
<Revision>2</Revision>
<Package ID="1ST">
<Service>FIRST CLASS</Service>
<FirstClassMailType>LETTER</FirstClassMailType>
<ZipOrigination>44106</ZipOrigination>
<ZipDestination>20770</ZipDestination>
<Pounds>0</Pounds>
<Ounces>3.5</Ounces>
<Container/>
<Size>REGULAR</Size>
<Machinable>true</Machinable>
</Package>
<Package ID="2ND">
<Service>PRIORITY</Service>
<ZipOrigination>44106</ZipOrigination>
<ZipDestination>20770</ZipDestination>
<Pounds>1</Pounds>
<Ounces>8</Ounces>
<Container>NONRECTANGULAR</Container>
<Size>LARGE</Size>
<Width>15</Width>
<Length>30</Length>
<Height>15</Height>
<Girth>55</Girth>
<Value>1000</Value>
<SpecialServices>
<SpecialService>1</SpecialService>
</SpecialServices>
</Package>
<Package ID="3RD">
<Service>ALL</Service>
<ZipOrigination>90210</ZipOrigination>
<ZipDestination>96698</ZipDestination>
<Pounds>8</Pounds>
<Ounces>32</Ounces>
<Container/>
<Size>REGULAR</Size>
<Machinable>true</Machinable>
<ShipDate>13-Dec-2010</ShipDate>
</Package>
</RateV4Request>');
$request = $devurl . "?API=" . $service . "&xml=" . $xml;
// echo "<pre>";
// print_r($request);
// die;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
// echo "<pre>";
// print_r($response);
// echo "</pre>";
}
}
/* End of file usps_curl.php */
/* Location: ./application/controllers/usps_curl.php */
Как видите, я прокомментировал и закомментировал различные строки. Я пробовал каждый из них с rawurlencode, urlencode и без кодировки, но ничего не работает. Будем признательны за любую помощь/предложения!
Я знаю, что я должен быть близок, потому что иногда я получаю правильное сообщение об ошибке, но я должен что-то упустить здесь!