Вызов wsdl в php через https с помощью Zend Soap Client - PullRequest
2 голосов
/ 11 июня 2010

Когда я пытаюсь подключиться к веб-сервису, я всегда получаю следующую ошибку

Исключение SoapFault: [s: Отправитель] Ошибка при проверке безопасности для сообщения

Я такженеобходимо использовать защитный заголовок, полный запрос мыла отправляется:

<env:Envelope>
<env:Header>
<ns2:Action env:mustUnderstand="1">
http://ws.agiv.be/crabtools/ICRABTools/GetAddressLocation
</ns2:Action>
<ns2:MessageID>urn:uuid:10000001blsd-ghfs</ns2:MessageID>
<ns2:ReplyTo>
<ns2:Address>
http://www.w3.org/2005/08/addressing/anonymous                      
</ns2:Address>
</ns2:ReplyTo>
<ns2:To>https://grab.beta.agiv.be/Tools/CRABTools.svc</ns2:To>
<o:Security env:mustUnderstand="1">
<wsu:Timestamp env:mustUnderstand="1">
<wsu:Created>2010-06-09T13:44:19Z</wsu:Created>
<wsu:Expires>2010-06-09T13:49:19Z</wsu:Expires>
</wsu:Timestamp>
<o:UsernameToken>
<o:Username>myUsername</o:Username>
<o:Password>myPassword</o:Password>
</o:UsernameToken>
</o:Security>
</env:Header>
<env:Body>
<ns1:GetAddressLocation>
<ns1:houseNumberId>2306852</ns1:houseNumberId>
</ns1:GetAddressLocation>
</env:Body>
</env:Envelope>

Мои имя пользователя и пароль верны, я уже пытался изменить дату истечения срока позже, но это не решает проблему.

В чем еще может быть причина этой ошибки?

Возможно, мне нужно настроить больше вещей в моем php-коде.

Я создал класс, который переопределяетZend_Soap_Client

public function __soapCall($function_name, $arguments, $options=null, $input_headers=null, $output_headers=null) {
        $inputheaders = array($this->wsactionheader(),$this->unencryptedSecurityHeader());
        $result = parent::__soapCall($this->functionname, $arguments, $options, $inputheaders);
        return $result;
    }

1 Ответ

0 голосов
/ 05 января 2011

Может помочь, если вы сообщите нам, к какому серверу вы пытаетесь подключиться.Также, пожалуйста, укажите заголовки запроса здесь.Используйте такой код

echo "REQUEST HEADERS:\n" . $client->getLastRequestHeaders() . "\n";
echo "REQUEST:\n" . $client->getLastRequest() . "\n";

Что вы можете сделать:

1) Убедитесь, что вы указали wsdl в своем мыльном клиенте.

2) Это может бытьпроблема "пространства имен".Убедитесь, что ваши SOAP-запросы используют тот же формат «конверта», что и ваш сервер (указанный в WSDL), т.е. проверьте атрибуты пространства имен, например

xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:env="http://www.w3.org/2003/05/soap-envelope"

Если пространство имен отличается от того, что в вашем wsdl, попробуйтеизбегайте явного указания 'soap_version' во встроенном PHP SoapClient, который заключен в Zend_Soap_Client.Первый всегда указывает 'soap_version', это приводит к xmlns:env="http://www.w3.org/2003/05/soap-envelope"

3) Запрашивает примеры XML рабочих запросов и / или полную трассировку HTTP и сравнивает их (diff) с вашими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...