2017-07-15 16 views
0

Mein Kunde möchte sein Paket per Kurierdienst verfolgen. Die Firma Courier Service gibt mir einen XML-Code, um ihre API zu verwenden. Ich bin neu in XML. Wie kann ich eine Tracking-Nummer über ein Formular an diesen XML-Code senden und das Tracking-Detail abrufen? Ich möchte dies auf meiner WordPress-Website verwenden. Danke im Voraus. Gegeben Code ist hier untenSo senden und empfangen Sie Daten mit XML per HTML Von

POST /codeapi/service_api.asmx HTTP/1.1 
Host: webapp.example.com 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: length 

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
    <GetCNDetailsByReferenceNumber xmlns="IP_ADDRESS/"> 
     <userName>string</userName> 
     <password>string</password> 
     <customerReferenceNo>string</customerReferenceNo> 
    </GetCNDetailsByReferenceNumber> 
    </soap12:Body> 
</soap12:Envelope> 

HTTP/1.1 200 OK 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: length 

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
    <GetCNDetailsByReferenceNumberResponse xmlns="IP_ADDRESS"> 
     <GetCNDetailsByReferenceNumberResult>xmlxml</GetCNDetailsByReferenceNumberResult> 
    </GetCNDetailsByReferenceNumberResponse> 
    </soap12:Body> 
</soap12:Envelope> 
+0

Das ist nicht nur XML, sondern SOAP. Ich schlage vor, eine SOAP-Bibliothek zu verwenden. – ThW

Antwort

0

Es gibt offensichtlich zwei Teile dazu, die Sende, die in den Kundendaten setzen muss und die Referenznummer und die erhalten, die dann die Details zeigt zurück.

kann der erste Teil so etwas wie ...

$xmlStr =<<< XML 
<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
    <GetCNDetailsByReferenceNumber xmlns="http://IP_ADDRESS/"> 
     <userName></userName> 
     <password></password> 
     <customerReferenceNo></customerReferenceNo> 
    </GetCNDetailsByReferenceNumber> 
    </soap12:Body> 
</soap12:Envelope> 
XML; 

$xml= simplexml_load_string($xmlStr); 
$xml->registerXPathNamespace("default", "http://IP_ADDRESS/"); 
$details = $xml->xpath("//default:GetCNDetailsByReferenceNumber"); 
$details[0]->userName="SomeName"; 
$details[0]->password="password"; 
$details[0]->customerReferenceNo="Custref"; 
echo 'Send: ' . $xml->asXML(); 

All dies in den Werten stößt tut, natürlich müssen Sie in den Details für Ihre Anfrage setzen, aber das gibt Ihnen die Idee und das XML, das Sie dann an ihren Service senden können.

Sobald der Rückgabewert zurückgeschickt wird, ist es dann nur die Daten extrahiert und anzeigt ...

$receiveXML = <<< XML 
<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
    <GetCNDetailsByReferenceNumberResponse xmlns="http://IP_ADDRESS"> 
     <GetCNDetailsByReferenceNumberResult>xmlxml</GetCNDetailsByReferenceNumberResult> 
    </GetCNDetailsByReferenceNumberResponse> 
    </soap12:Body> 
</soap12:Envelope> 
XML; 

$xml= simplexml_load_string($receiveXML); 
$xml->registerXPathNamespace("default", "http://IP_ADDRESS"); 
$details = $xml->xpath("//default:GetCNDetailsByReferenceNumberResult"); 
echo "\n\nReturn value:".(string)$details[0]; 

Wie Sie die Informationen zurück auf ihre API abhängig, aber das wird, dass die Daten übernehmen und extrahiere den Inhalt.

Ein Problem ... Als ich es mit dem ursprünglichen XML versuchte, fand ich, dass die xmlns="IP_ADDRESS/" Varianten eine Warnung verursachten (ist kein absoluter Pfad), also änderte ich dies für meine eigenen Zwecke zu xmlns="http://IP_ADDRESS/". Möglicherweise müssen Sie dies ändern und die registerXPathNamespace Zeilen mit den gleichen Werten aktualisieren.

Verwandte Themen