Лучше не использовать никаких SOAP клиентов - горя хапнуть можно.
Обычный Http фасад отлично подходит.
Например, отправка запроса на авторизацию к АПИ налоговой.
Метод для контроллера:
private function sendRequest(): string
{
$template = view($templateType, [
'token' => 'master token'
])->render()
$url = 'https://openapi-test.gnivc.ru:8090/open-api/AuthService/0.1';
$response = Http::withBody($template, 'text/xml')->post($url);
return $response->body();
}
Поскольку SOAP использует xml то для этого я использовал blade шаблоны ларки. Они отлично подходят для такого количества синтаксического хлама SOAP (не ругайте за предвзятость. Да, я люблю REST :)).
Шаблон:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="urn://x-artefacts-gnivc-ru/inplat/servin/OpenApiMessageConsumerService/types/1.0">
<soapenv:Header/>
<soapenv:Body>
<ns:GetMessageRequest>
<ns:Message>
<tns:AuthRequest xmlns:tns="urn://x-artefacts-gnivc-ru/ais3/kkt/AuthService/types/1.0">
<tns:AuthAppInfo>
<tns:MasterToken>{{ $token}}</tns:MasterToken>
</tns:AuthAppInfo>
</tns:AuthRequest>
</ns:Message>
</ns:GetMessageRequest>
</soapenv:Body>
</soapenv:Envelope>
Прилетает такой же всратый ответ в xml.
Далее, я его конвертил в array пхп:
$data = $this->sendRequest();
$response = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $data );
$xml = new \SimpleXMLElement($response);
$body = $xml->xpath('//soapBody')[0];
$array = json_decode(json_encode((array)$body), TRUE);
Дальше уже получаем более менее сносный массив, а его можно преобразовать в коллекцию или работать прям с ним, как удобнее.