AdilA
@AdilA
Нравится кодить, изучаю go c echo

Как сгенерировать xml в ruby on rails c gem'ом savon?

Всем привет! по долгу службы пришлось столкнуться с SOAP, теперь понимаю за что не любят Гейтса, не могу понять как вообще все это работает, необходимо на удаленный сервер сформировать запрос со следующим содержимом:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:esf="esf">
   <soapenv:Header>
      <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
         <wsse:UsernameToken wsu:Id="UsernameToken-664678CEF9FFC67AD214168421472821">
            <wsse:Username>123456789011</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>            
         </wsse:UsernameToken>
      </wsse:Security></soapenv:Header>
   <soapenv:Body>
      <esf:createSessionRequest>
         <tin>?</tin>
         <!--Optional:-->
         <projectCode>?</projectCode>
         <x509Certificate>?</x509Certificate>
      </esf:createSessionRequest>
   </soapenv:Body>
</soapenv:Envelope>


генерирую xml запрос вида

client = Savon.client(wsdl: "https://212.154.167.194:9443/esf-web/ws/api1/SessionService?wsdl", 
  		ssl_verify_mode: :none,
  		env_namespace: :soapenv,
  		pretty_print_xml: true,
  		env_namespace: :soapenv,
  		:raise_errors => true,
  		log: true,
		#loglevel: :debug,
  		:soap_header => {
  "wsse:Security" => {
    "@xmlns:wsse" => "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",
    "@xmlns:wsu" => "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd",
    "@soapenv:mustUnderstand" => "1",
    "wsse:UsernameToken" => {
      "wsse:Username" => "foo",
      "wsse:Password" => "bar"
    }
  }
})
  		message = {
  "createSessionRequest" =>
  {
    "tin" => "placeholder",
    "x509Certificate" => "placeholder"
  }
}
  		response = client.call(:create_session, message: {:tin => 'XXXX', :x509Certificate => 'xxxxxx'})


но выдает ошибку:
Savon::SOAPFault: (ns1:SecurityError) A security error was encountered when verifying the message

Подскажите что я делаю не так, гугл предательски молчит
  • Вопрос задан
  • 614 просмотров
Пригласить эксперта
Ответы на вопрос 1
Предполагаю, что проблема связана с подменой SSL сертификата в зоне .kz (проверял URL в браузере):
NET::ERR_CERT_COMMON_NAME_INVALID
Subject: ESF.GOV.KZ
Issuer: ҰЛТТЫҚ КУӘЛАНДЫРУШЫ ОРТАЛЫҚ (RSA)
Expires on: Feb 11, 2017
Current date: Sep 26, 2017

This server could not prove that it is 212.154.167.194; its security certificate is from ESF.GOV.KZ. This may be caused by a misconfiguration or an attacker intercepting your connection.


Тут, как плохой вариант, можно игнорировать проверку SSL сертификата и тогда, возможно, запрос "прокатит".

Отловить код ошибки можно так:
begin
    response = client.call(:create_session, message: {:tin => 'XXXX', :x509Certificate => 'xxxxxx'})
  rescue Savon::SOAPFault => error
    fault_code = error.to_hash[:fault][:faultcode]
    raise CustomError, fault_code
  end
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы