У меня есть XML-файл в формате ниже
<?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;
Учитывая следующий заголовок SOAP
<soap:Header>
<AuthenticationCredentials>
<tusa:Password>XXXXX</tusa:Password>
<tusa:Username>XXXXX</tusa:Username>
</AuthenticationCredentials>
</soap:Header>
Как я могу передать имя пользователя и пароль в класс SoapHeader. Я пытался использовать код ниже, но я получаю ошибку
Требуются учетные данные для аутентификации
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();
}
Я думаю, что вы ищете что-то вроде этого
$auth = [
'Username' => 'XXXXX',
'Password' => 'XXXXX',
];
$ns = 'http://www.w3.org/2003/05/soap-envelope/';
$header = new SOAPHeader($ns, 'AuthenticationCredentials', $auth);
$client->__setSoapHeaders($header);
Других решений пока нет …