本文介绍了用于PHP的XML请求和响应,用于USPS费率计算器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试为网站构建USPS费率计算器,但不幸的是,USPS的测试网址似乎不起作用.无论如何,我的代码此刻不返回任何内容,甚至没有关于url的错误消息...

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...

您能看看我是否做对了吗?我对使用PHP的XML感到迷茫...

Would you take a look to see if I am doing the right thing? I get a bit lost with XML on 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)

推荐答案

由于未定义$ ch,因此缺少curl_init()函数

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

$ch = curl_init();

您也不会打印响应:

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

最后,您可以打印卷曲的响应并进行更改:

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

echo "TEST";

收件人:

print "RESPONSE: $result";

我得到的是RateV4未经授权,RateV4来自何处?

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..

这篇关于用于PHP的XML请求和响应,用于USPS费率计算器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-16 10:40