Я работаю над проектом, который требует работы с SOAP API... и мне очень понравился внешний вид Savon для решения этой проблемы. Это мой первый раз, когда я работаю с API вне учебника Академии кода...
Короче говоря, независимо от того, что я делаю ... сторонний API продолжал говорить о плохом ключе API ... поскольку их отчеты об ошибках довольно слабы. У меня был код для всего этого здесь, но я удалил его после того, как научился устанавливать гем для регистрации исходящих http-запросов. При этом я добрался до источника проблемы... и мог бы использовать некоторые советы.
Короче говоря, Savon не генерирует тот же исходящий XML, что и SOAPUI.
Использование SOAPUI (что мы хотим...)
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sec="http://secure.treasury.exchange/">
<soapenv:Header/>
<soapenv:Body>
<sec:GetAccountBalance soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<GetAccountBalanceRequest xsi:type="sec:GetAccountBalanceRequest">
<!--You may enter the following 2 items in any order-->
<ApiKey xsi:type="xsd:string">xxx</ApiKey>
<AccountNumber xsi:type="xsd:string">123</AccountNumber>
</GetAccountBalanceRequest>
</sec:GetAccountBalance>
</soapenv:Body>
</soapenv:Envelope>
Это то, что генерирует Савон
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tns="http://secure.treasury.exchange/"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<tns:GetAccountBalance>
<apiKey>xxx</apiKey>
<accountNumber>123</accountNumber>
</tns:GetAccountBalance>
</env:Body>
</env:Envelope>
Я предполагаю, что есть некоторые переменные, которые мне нужно установить в конфигурации, чтобы связать Савона с тем, что делает пользовательский интерфейс SOAP...
Любой совет?
ОБНОВЛЕНИЕ: найдено грязное решение.
https://www.reddit.com/r/ruby/comments/289wfn/soap_issues_with_savon/
В двух словах, вы можете определить xml: переменную... которую вы можете использовать, чтобы определить точный xml, который вы хотите запросить savon. Выглядит некрасиво, но, по крайней мере, пока работает.
Я буду следить за лучшим решением.