2016-07-05 18 views
1

Hallo Ich versuche API-Aufruf an USPS API mit PHP Curl zu tun.Assist mit USPS API mit PHP Curl

erhalte ich die folgende Antwort:

[Number] => 80040B19 
[Description] => XML Syntax Error: Please check the XML request to see if it can be parsed. 
[Source] => USPSCOM::DoAuth 

ich meinen Code zusammen für den API-Aufruf von einem Beispielcode auf hier und auch die Probe auf der USPS-Website; aber es kann nicht funktionieren (Fehler oben); hier ist mein Code:

$input_xml = '<AddressValidateRequest USERID="xxxxxxx"> 
<Address ID="0"> 
    <Address1></Address1> 
    <Address2>6406 Ivy Lane</Address2><City>Greenbelt</City> 
<State>MD</State> 
<Zip5></Zip5> 
<Zip4></Zip4> 
</Address> 
</AddressValidateRequest>'; 

$url = "http://production.shippingapis.com/ShippingAPITest.dll?API=Verify"; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 

    curl_setopt($ch, CURLOPT_POSTFIELDS, 
       "xmlRequest=" . $input_xml); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300); 
    $data = curl_exec($ch); 
    curl_close($ch); 

    //convert the XML result into array 
    $array_data = json_decode(json_encode(simplexml_load_string($data)), true); 

    print_r('<pre>'); 
    print_r($array_data); 
    print_r('</pre>'); 

ich jemand bin der Hoffnung, mit helfen kann, was ich falsch mache ...

+3

... das ist beunruhigend nah an meiner Adresse als Kind. Und du verpasst die Eröffnung '<' vor 'City' –

+0

check' Greenbelt 'es fehlt die Eröffnung –

+2

@SeanBright sollten Sie vorsichtig sein, diese Informationen zu posten, kann jemand in der Zeit zurück reisen und Sie entführen zu verhindern Sie kommentieren zu diesem Beitrag in der Zukunft – Ray

Antwort

4

Nach the documentation, sollen Sie das XML in einem Feld XML namens passieren, nicht xmlRequest. Versuchen Sie so etwas stattdessen:

<?php 
$input_xml = <<<EOXML 
<AddressValidateRequest USERID="xxxxxxx"> 
    <Address ID="0"> 
     <Address1></Address1> 
     <Address2>6406 Ivy Lane</Address2> 
     <City>Greenbelt</City> 
     <State>MD</State> 
     <Zip5></Zip5> 
     <Zip4></Zip4> 
    </Address> 
</AddressValidateRequest> 
EOXML; 

$fields = array(
    'API' => 'Verify', 
    'XML' => $input_xml 
); 

$url = 'http://production.shippingapis.com/ShippingAPITest.dll?' . http_build_query($fields); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300); 
$data = curl_exec($ch); 
curl_close($ch); 

// Convert the XML result into array 
$array_data = json_decode(json_encode(simplexml_load_string($data)), true); 

print_r('<pre>'); 
print_r($array_data); 
print_r('</pre>'); 
?> 
+0

Vielen Dank Sean ... das hat funktioniert, obwohl ich ein wenig bearbeiten musste; Es hat dir nicht gefallen, wie du das Array "$ fields" gemacht hast und hast einen Fehler bekommen. aber das war etwas, mit dem ich umgehen konnte, also habe ich im Grunde das genaue Array etwas anders gedreht - aber das hätte ich nicht ohne deine Hilfe tun können. Vielen Dank (Ich werde deine Antwort für den Array-Teil bearbeiten) –

+0

Sieht aus wie du bist Ausführen einer älteren PHP-Version, die die '[...]' Array-Syntax nicht unterstützt. Ich habe aktualisiert, um zu zeigen, wie man es mit der älteren 'array (...)' -Syntax macht. –

+0

yeah - ich bin sicher, dass du recht hast; Ich habe es tatsächlich mit Parens versucht, weil ich dachte, es könnte so gemacht werden; aber konnte sich nicht genau erinnern, wie es gelaufen ist; Der schnellste Weg, es zu tun, war die Art, wie ich meine Handrücken kannte ... Vielen Dank! –