2016-07-11 12 views
1

$ length = strlen ($ requestXml); $ ch = curl_init ($ serviceUrl);Nicht korrekte Antwort in CURL Seife PHP

curl_setopt($ch, CURLOPT_VERBOSE, true); 

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: text/xml; charset=utf-8', 
    "SOAPAction: \"https://example.com/PMAPI/example/$action\"", 
    "Content-length: ".strlen($requestXml) 
)); 

curl_setopt($ch, CURLOPT_POSTFIELDS, $requestXml); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_TIMEOUT, 15); 

curl_setopt($ch, CURLOPT_COOKIEFILE, "cookieFIle.txt"); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookieFIle.txt"); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

$output = curl_exec($ch); 
$info = curl_getinfo($ch); 


curl_close($ch); 

$xml= simplexml_load_string($output); 
print_r($xml); 

Ausgang Ich erhalte:

, die nicht im XML-Format ist. Aber in View Source Der Code ist im XML-Format. Aber es hat nicht funktioniert, wenn ich diese Ausgabezeichenfolge in Xml Parser analysiere.

Ausgabe sollte in folgendem Format sein, das ich auf der View-Source-Seite sehen kann.

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><TopUpRequestResponse xmlns="https://dollarphone.com/PMAPI/PinManager"><TopUpRequestResult><responseCode>1</responseCode><TransId>27464347</TransId></TopUpRequestResult></TopUpRequestResponse></soap:Body></soap:Envelope> 

Wenn ich versuche, auf das Objekt zuzugreifen. Der Fehler lautet "Versuch, die Eigenschaft eines Nicht-Objekts zu erhalten".

Bitte jemand helfen mir dieses Problem zu lösen?

+0

Sie scheinen mit curl durch eine Menge Ärger zu gehen. Du weißt, dass es so etwas wie SoapClient gibt, oder? http://php.net/manual/en/class.soapclient.php – 1sloc

+0

Ja, ich weiß. Aber ich habe Authentifizierungsproblem, wenn ich SoapClient versuche, da es NTLM-Authentifizierung ist. – NDesai

Antwort

1

ich die Lösung gefunden: Ich entfernte gerade Tag aus meinem Ergebnis. und es funktioniert.

$response1 = str_replace("<soap:Body>","",$output); 
     $response2 = str_replace("</soap:Body>","",$response1); 

     // converting to XML 
     $parser = simplexml_load_string($response2); 

Danke

0

Scratch alles, was ich schon sagte. Es funktioniert wie es sollte

simplexml_load_string konvertiert eine XML-Zeichenfolge in ein Objekt. Sie machen ein print_r auf einem SimpleXMLElement Objekt, das von simplexml_load_string() erstellt wurde, und es ist nur die Felder in einiger menschlich lesbarer Weise auszudrucken.

Ihr Objekt hat ein Feld mit dem Wert TransId von 27464347.

Versuchen Sie eine var_dump($xml) anstelle von print_r und Sie werden das Objekt anstelle von einigen menschlichen Darstellung davon sehen.

Ich bin mir nicht sicher, aber nur raten 1 preappended in der Zeichenfolge, die Sie von Ihnen sehen print_r könnte davon das erste Objekt im XML-Körper sein? Hier ist ein Link auf die __toString() Methode der SimpleXMLElementhttp://php.net/manual/en/simplexmlelement.tostring.php

+0

Ich kann die Namespaces des Objekts sehen, aber der Körper ist leer. – NDesai

+0

Fügen Sie dem Beitrag das Ergebnis hinzu von: var_dump ($ xml); – Ray

+0

Objekt (SimpleXMLElement) [1] – NDesai