XML Request and Response with PHP for USPS Rate Calculator

∥☆過路亽.° 提交于 2019-12-10 22:16:14

问题


I have been trying to build a USPS Rate Calculator for a site, but unfortunately the test url from USPS does not seem to work. In any case, my code does not return anything at the moment, not even the error message about the url...

Would you take a look to see if I am doing the right thing? I get a bit lost with XML on PHP...

CODE:

$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)

回答1:


You are missing the curl_init() function since $ch is not defined

$ch = curl_init();

Also you are not printing the response:

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

Lastly, you can print the response from curl, change:

echo "TEST";

to:

print "RESPONSE: $result";

I'm getting that RateV4 is not authorized, where is RateV4 coming from?

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>

Hope this at least helps with debugging..




回答2:


RateV4 is a sevice name at USPS API.

check following link - http://uspsship.blogspot.in/



来源:https://stackoverflow.com/questions/17028152/xml-request-and-response-with-php-for-usps-rate-calculator

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!