Добро пожаловать в стек переполнение Graccem,
упомянутые вами атрибуты являются пространствами имен. Они автоматически добавляются клиентом soap к вашему xml при отправке запроса. Другим возможным решением может быть использование метода __doRequest () клиента soap. В этом случае вам необходимо расширить клиентский класс soap.
declare(strict_types=1);
namespace Application\Soap;
class MySoapClient extends SoapClient
{
public function __doRequest(string $request, string $location, string $action, int $version, int $one_way = 0): string
{
$doc = new DOMDocument();
$doc->loadXML($request);
$elements = $doc->getElementsByNameNS('http://schemas.xmlsoap.org/soap/envelope/', 'Body');
if ($elements->length()) {
$body = $elements->item(0);
$body->setAttributeNS('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd', 'wsu:Id', 'id-1');
}
$request = $doc->saveXML();
$this->__last_request = $request;
return parent::__doRequest($request, $location, $action, $version, $one_way);
}
}
Метод SoapClient::__doRequest()
принимает полностью сформированный запрос xml в качестве первого параметра. Этот метод является последним шансом манипулировать xml перед отправкой.
Как его использовать ...
<code>try {
$wsdl = 'some.wsdl';
$options = [
'exceptions' => true,
'soap_version' => SOAP_1_1,
'trace' => true,
];
$data = []; // some data construct
$client = new MySoapClient($wsdl, $options);
$response = $client->doSomeAction($data);
} catch (SoapFault $fault) {
$lastRequest = $lastResponse = '';
if ($client instanceof SoapClient) {
$lastRequest = $client->__getLastRequest();
$lastResponse = $client->__getLastResponse();
}
echo "<pre>";
var_dump($fault, $lastRequest, $lastResponse);
echo "
";}
Мы используем здесь указывается trace
, чтобы увидеть, что мы отправили и что мы получаем в качестве ответа в случае ошибки. Атрибут D ie wsu:Id
теперь должен быть в вашем запросе xml.