2016-06-29 9 views
0

Ich habe eine XML-Datei im Format unterPassing Authentifizierungsinformationen in Soapheader Klasse

<?php 

$xmlstr = <<<XML 
<?xml version="1.0" encoding="UTF-8" ?> 
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tusa="http://schemas.datacontract.org/2004/07/Tusa.Services.ConsumerConnect" xmlns:tem="http://tempuri.org/"> 
<soap:Header> 
    <AuthenticationCredentials> 
    <tusa:Password>XXXXX</tusa:Password> 
    <tusa:Username>XXXXX</tusa:Username> 
    </AuthenticationCredentials> 
</soap:Header> 
<soap:Body> 
    <tem:AddProduct> 
     <tem:CustomerDetail> 
       <tusa:AddressLine1>52 TEST DRIVE</tusa:AddressLine1> 
       <tusa:City>JOHANNESBURG</tusa:City> 
       <tusa:MaritalStatus>Unknown</tusa:MaritalStatus> 
       //more nodes 
     </tem:CustomerDetail> 
    </tem:AddProduct> 
</soap:Body> 
</soap:Envelope> 
XML; 

den folgenden SOAP-Header Bei

<soap:Header> 
    <AuthenticationCredentials> 
    <tusa:Password>XXXXX</tusa:Password> 
    <tusa:Username>XXXXX</tusa:Username> 
    </AuthenticationCredentials> 
</soap:Header> 

Wie kann ich den Benutzernamen und das Passwort an die Soapheader-Klasse übergeben. Ich habe versucht, den Code unten verwenden, aber ich bin immer einen Fehler

Authentifizierungsinformationen

try 
{ 
    $auth = array(
     'Username'=>'XXXXX', 
     'Password'=>'XXXXX', 
    ); 

    $client = new \SoapClient('https://test.com//Indirect.svc?wsdl', array('soap_version' => SOAP_1_2, 'trace' => 1)); 

    $actionHeader = new \SoapHeader('http://www.w3.org/2005/08/addressing', Action', http://tempuri.org/IInDirect/AddProduct'); 

    $client->__setSoapHeaders($actionHeader); 

    $response = $client->AddProduct($xmlstr); 
} 

catch (\Exception $e) 
{ 
    echo "Error!"; 
    echo $e -> getMessage(); 
    echo 'Last response: '. $client->__getLastResponse(); 
} 
+0

Sie haben gesehen [SoapHeader :: SoapHeader] (http://php.net/manual/en/soapheader.soapheader.php) –

+0

die Dokumentation nicht verstehen. Wie würdest du das machen, indem du den Link verwendest, den du angegeben hast? – jaahvicky

Antwort

1

erforderlich sind, denke ich, Sie suchen so etwas wie dieses

$auth = [ 
    'Username' => 'XXXXX', 
    'Password' => 'XXXXX', 
]; 

$ns = 'http://www.w3.org/2003/05/soap-envelope/'; 

$header = new SOAPHeader($ns, 'AuthenticationCredentials', $auth);   

$client->__setSoapHeaders($header); 
+0

Funktioniert immer noch nicht, wenn ich Ihren Code verwende Ich erhalte jetzt einen Fehler unter 'Fehler! Die SOAP-Aktion, die für die Nachricht angegeben wurde, '' stimmt nicht mit der HTTP-SOAP-Aktion überein ', http://tempuri.org/IInDirect/AddProduct '. Letzte Antwort: http://www.w3.org/2005/08/addressing/faults:Sendera:ActionMismatchDie für die Nachricht angegebene SOAP-Aktion stimmt nicht mit der HTTP-SOAP-Aktion überein, http://tempuri.org/IInDirect/AddProduct '. a: Action' – jaahvicky

+0

Versuchen Sie, $ ns in meiner Antwort durch http://tempuri.org/IInDirect/AddProduct –

+0

ersetzen immer noch den gleichen Fehler nach dem Ersetzen von $ ns. – jaahvicky

Verwandte Themen