php — Создание запроса SOAP с помощью Guzzle и базовой аутентификации

#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