#php #soap #basic-authentication #guzzle #soap-client
#php #soap #базовая аутентификация #guzzle #soap-клиент
Вопрос:
Мне нужно сделать запрос SOAP с помощью PHP, используя базовую аутентификацию SOAP. Учитывая, что полный XML передается в виде строки, а проект уже использует Guzzle, идеальным решением было бы не использовать SoapClient, а придерживаться Guzzle.
Следуя документации guzzle Auth, я вызываю метод запроса следующим образом:
<?php
//...
$client = new GuzzleHttpClient();
$response = $client->request('POST', $soapUri, [
'body' => $xmlRequest, // <x:Envelope ... ><x:Header/>...
'headers' => [
'Content-Type' => 'text/xml',
'accept' => '*/*',
'accept-encoding' => 'gzip, deflate'
],
'auth' => [
$username // basic auth username,
$password // basic auth password,
]
]);
$responseBody = $response->getBody();
Но ответ, который я получаю,:
<OFX>
<PTNL>
<STATUS><CODE>-505</CODE>
<SEVERITY>ERROR</SEVERITY>
<MESSAGE>MISSING AUTHENTICATION</MESSAGE>
</STATUS>
</PTNL>
</OFX>
Я попытался распечатать строку и импортировать ее как тело запроса SOAP в SoapUI, и это сработало правильно, базовое имя пользователя и пароль для авторизации действительны. Редактирование заголовка SOAP Auth не изменило ошибку, и в WSDL не было указаний на заголовки HTTP-запросов, поэтому я предполагаю, что причиной этой ошибки может быть только SOAP Basic Auth.
Может кто-нибудь помочь мне создать правильный SOAP Basic Auth с помощью Guzzle?
Комментарии:
1. есть много вопросов, которые помогают отправлять запросы soap через guzzle, но люди по-прежнему предпочитают php soap client