2017-01-20 5 views
1

私はcURLを使用してPOST情報をusps送料率計算機に送信しています。USPS APIエラーを返す - XMLにエラーがありません

$info = "<?xml version='1.0' encoding='UTF-8'?> 
<RateV4Request USERID='xxxx'> 
    <Package ID='$aucid'> 
     <Service>Priority</Service> 
     <ZipOrigination>xxxx</ZipOrigination> 
     <ZipDestination>$zip</ZipDestination> 
     <Size>$size</Size> 
     <Pounds>$pounds</Pounds> 
     <Ounces>$ounces</Ounces> 
     <Container>RECTANGULAR</Container> 
     <Width>$width</Width> 
     <Length>$length</Length> 
     <Height>$height</Height> 
     <SpecialServices><SpecialService>108</SpecialService></SpecialServices> 
    </Package> 
</RateV4Request>"; 

$array = array("API" => "RateV4", "XML" => $info); 

$link = "http://production.shippingapis.com/ShippingAPI.dll"; 

curl_setopt($ch, CURLOPT_URL,$link); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$array); 
$answer=curl_exec($ch); 
echo $answer; 
curl_close($ch); 

私はUSPS Webツールにサインアップすると、電子メールが(私はその敏感な性質のためのxsに置き換えている)USERIDで送られました。

同じメールでは、レート計算が許可されています。私は先に行って、エコーされたXMLを取り、xmlvalidation.comにそれを接続し、それがエラーを発見した

80040B19XML Syntax Error:
Please check the XML request to see if it can be parsed.USPSCOM::DoAuth

: がここに返されるエラーです。私はまた、上部に<?xml version="1.0" encoding="UTF-8">行なしでそれを試してみました。

+1

にその全体をXMLをラップする必要があるかもしれません<Package ID=\"".$aucid."\">

をあなたはcurl_initを持っていますか? – user2182349

+1

これらの値( '$ pounds'のようなもの)が実際の値(数字)で更新されていて、単に" $ pounds "という文字列ではないと確信していますか? – jonmrich

+0

@ user2182349はい、それは上です。 –

答えて

1

PHPはパッケージIDを科学的表記にしています。なぜなら、それは単なる大きな「数」なので、それを文字列にすることによって、そのことを止める必要があるからです。

の代わりにこの:<Package ID='$aucid'>

はこの試してみてください:あなたはまた、rawurlencode

+0

'$ aucid'は2桁の変数です。私は先に進んで、それをrawurlencodeに入れ、同じエラーが出ます。 –

関連する問題