XML-запрос и ответ с помощью PHP для калькулятора скорости USPS


Я пытался создать калькулятор скорости USPS для сайта, но, к сожалению, тестовый URL-адрес от USPS, похоже, не работает. В любом случае, мой код на данный момент ничего не возвращает, даже сообщение об ошибке об URL-адресе...

Не могли бы вы взглянуть, правильно ли я поступаю? Я немного теряюсь с XML на PHP...

КОД:

$zip = 90002;
$pounds = 0.1;

function USPSParcelRate($pounds,$zip) {
$url = "https://secure.shippingapis.com/ShippingAPITest.dll";
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
// parameters to post
curl_setopt($ch, CURLOPT_POST, 1);
$xml = "API=RateV4&XML=<RateV4Request USERID='USERNAME' >
<Revision/>
     <Package ID='1ST'>
          <Service>PRIORITY</Service>
          <ZipOrigination>10025</ZipOrigination>
          <ZipDestination>$zip</ZipDestination>
          <Pounds>$pounds</Pounds>
          <Ounces>0</Ounces>
          <Container></Container>
          <Size>REGULAR</Size>
          <Width></Width>
          <Length></Length>
          <Height></Height>
          <Girth></Girth>
     </Package>
</RateV4Request>";
// send the POST values to USPS
curl_setopt($ch, CURLOPT_POSTFIELDS,$xml);
    $result = curl_exec($ch);
    $data = strstr($result, '<?');
    $xml_parser = xml_parser_create();
    xml_parse_into_struct($xml_parser, $data, $vals, $index);
    xml_parser_free($xml_parser);
    $params = array();
    $level = array();
    echo "TEST";
    foreach ($vals as $xml_elem) {
        if ($xml_elem['type'] == 'open') {
            if (array_key_exists('attributes',$xml_elem)) {
                list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
            } else {
            $level[$xml_elem['level']] = $xml_elem['tag'];
            }
        }
        if ($xml_elem['type'] == 'complete') {
        $start_level = 1;
        $php_stmt = '$params';
        while($start_level < $xml_elem['level']) {
            $php_stmt .= '[$level['.$start_level.']]';
            $start_level++;
        }
        $php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];';
        eval($php_stmt);
        }
    }
    curl_close($ch);
    echo '<pre>'; print_r($params); echo'</pre>'; // Uncomment to see xml tags
    return $params['RateV4Response']['1ST']['1']['RATE'];
}

USPSParcelRate($pounds,$zip)
Author: samyb8, 2013-06-10

2 answers

Вам не хватает функции curl_init(), так как $ch не определен

$ch = curl_init();

Также вы не печатаете ответ:

**echo** USPSParcelRate($pounds,$zip);

Наконец, вы можете распечатать ответ от curl, изменить:

echo "TEST";

Кому:

print "RESPONSE: $result";

Я понимаю, что RateV4 не авторизован, откуда берется RateV4?

TEST HTTP/1.1 200 Connection established

HTTP/1.1 200 OK
Connection: close
Date: Mon, 10 Jun 2013 17:16:17 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET

<Error>
    <Number>80040b1a</Number>
    <Description>API Authorization failure. RateV4 is not a valid API name for this protocol.</Description>
    <Source>UspsCom::DoAuth</Source>
</Error>

Надеюсь, это, по крайней мере, поможет с отладкой..

 3
Author: immulatin, 2013-06-10 17:20:38

RATEV4 - это имя службы в API USPS.

Проверьте следующую ссылку - http://uspsship.blogspot.in/

 1
Author: Amit Dave, 2014-01-29 11:15:34