Здравствуйте!
Поступила задача на интеграцию с порталом soccard.ru (карта москвича).
Необходимо было предоставить механизм, который по входным данным получит ответ сервера с данными по клиенту. Поиск информации по интернету, больших результатов мне не принес. Да и времени предоставили немного, максимум 4 часа на реализацию механизма (для клиента важен был результат, а не качество).
На первый взгляд, задача показалась легкой, добавил ws-ссылку (заказчик предоставил на тестовый сервер: http://37.230.240.33:7778/gateway/services/SID0003134?wsdl), посмотрел структуру пакета, создал фабрику xdto по этой ссылке, заполнил данными, отправил. Вроде все должно быть отлично, но те тут то было. Пришел ответ:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {http://schemas.soccard.ru/tscws/TransactionService/v1}:TransactionService:processTransaction()
по причине:
При вызове веб-сервиса произошла ошибка. Ошибка SOAP сервера: Invalid username or password
Код ошибки: Client.AuthenticationFault
Техническая информация:
<detail xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/>
Почитав внимательно документацию =), выяснил, что в каждом запросе, должен быть заголовок согласно спецификации WS-Security (http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf) в котором указан логин и пароль. Как его передать с помощью веб сервиса, так и не понял. Пришлось переделать запрос с веб сервиса на http соединение, а тело запроса собрать вручную, так как времени оставалось очень мало… В итоге кривой и хромой механизм успешно заработал.
Большой минус данной реализации, что xml собирается вручную. Если знаете, как собрать схему другими способами, буду рад помощи.
Запускал на 1С:ERP Управление предприятием 2 (2.4.6.200) и Розница, редакция 2.2 (2.2.10.19)
PS: это моя первая публикация, буду рад любым замечаниям =)