我一直在尝试为网站构建USPS费率计算器,但不幸的是,来自USPS的测试网址似乎不起作用。在任何情况下,我的代码目前都不返回任何内容,甚至没有关于url的错误消息......
你会看看我做的是否正确吗?我在PHP上的XML上有点迷失......
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)
答案 0 :(得分:3)
你缺少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>
希望这至少有助于调试..
答案 1 :(得分:1)
RateV4是USPS API的服务名称。
检查以下链接 - http://uspsship.blogspot.in/