2016-06-30 2 views
0

Ich arbeite daran, über Webdienste eine Verbindung zu einem anderen Unternehmen herzustellen, das PHP verwendet. Die Verbindung ist basierend auf der Antwort des Webdienstes erfolgreich. Es gibt keine Benutzervalidierung oder kein Passwort im Prozess.SOAPClient hängt keine Parameter beim Methodenaufruf an

Die Validierung der Methode ist ebenfalls erfolgreich, basierend auf dem Ergebnis von print_r ($ client -> __ getFunctions()) und print_r ($ client -> __ getTypes()), wo ich die Informationen in beiden Fällen sehen kann.

Die Probleme kommen, wenn die Parameter an die Methode übergeben werden, kann die Anforderung hat die Parameter nicht in dem XML-Körper:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"> 
<SOAP-ENV:Body> 
    <ns1:GetToken/> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Ich habe verschiedene Arten von Anruf mit dem gleichen Ergebnis:

$response = $client->__soapCall('GetToken', array('parameters' => $params)); 

oder

$response = $client->GetToken(array('parameters' => $params)); 

oder

$response = $client->__soapCall('GetToken', array($params)); 

oder

$response = $client->GetToken(array($params)); 

Jeder Versuch ist die gleiche Antwort vom Web-Service, da das Verfahren nicht die Parameter auf die Anfrage Befestigung

[GetTokenResult] => stdClass Object 
     (
      [Token] => 
      [Url] => 
      [StatusCode] => 400 
      [StatusDescription] => Value cannot be null. 
     ) 

Dies ist mein Code:

Try{ 
    $wsdlLocation = 'http://webservice.com/Agent.svc?wsdl'; 
    $client = new SoapClient($wsdlLocation,array('location' => $wsdlLocation, 
          'trace' => true, 
         'exceptions' => true 
       ) 
      ); 

$params = array(
     'Key' => '123456', 
     'ReturnUrl' => 'http://Anyweb.com', 
     'Name' => 'John Doe', 
     'Office' => 'NorhWest', 
     'Business' => 'PL', 
     'Email' => '[email protected]', 
     ); 

$response = $client->__soapCall('GetToken', array('parameters' => $params)); 

print_r($response); 

echo "REQUEST:\n" . $client->__getLastRequest() . "\n"; 



} 
catch (SoapFault $fault) { 
    trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR); 
} 

Auch ich habe den Web-Service mit dem XMLspy getestet. Senden einer Anfrage von diesem Tool mit den gleichen Werten und Parametern. Die Antwort war in diesem Fall erfolgreich. Das Problem ist also nicht der Service der anderen Firma.

Irgendeine Idee, wie ich dieses Problem lösen kann. Vielen Dank.

Antwort

0

Nun, nach einiger Zeit fand ich die Antwort darauf. Der Soap-Dienst wartete auf ein Array namens 'request' anstelle von 'Parameter'. Das behebt das ganze Problem.

$response = $client->__soapCall('GetToken', array('request' => $params)); 

Ich hoffe, dies spart Zeit für ein anderes Volk.