2

我正在 Rails 3 上开发并使用 Savon(savonrb.com)

  1. 我需要通过 SOAP 连接到 Web 服务
  2. Web 服务需要身份验证

我可以连接但无法获得身份验证...

我使用 SOAP UI 进行测试,一切正常。

我的 Rails 代码如下所示:

client = Savon::Client.new do
  wsdl.document = "http://services.blahblah.com/Service.asmx?WSDL"
end

client.wsse.credentials "username", "password", :digest

if response.success?

  @soap_status = 'Connected'
  @data = response.to_array(:get_brochure_response, :error_message)

end

我得到响应但 :error_message 返回身份验证失败...

这是它在 SOAP UI 中的外观

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ser="http://services.blahblah.com/service">
   <soap:Header>
      <ser:ICEAuthHeader>
         <!--Optional:-->
         <ser:Username>username</ser:Username>
         <!--Optional:-->
         <ser:Password>password</ser:Password>
      </ser:ICEAuthHeader>
   </soap:Header>
   <soap:Body>
      <ser:GetBrochure>
    <!--Optional:-->
         <ser:MappedID>123</ser:MappedID>
      </ser:GetBrochure>
   </soap:Body>
</soap:Envelope>
4

3 回答 3

1

用户名和密码是否与标头中的 SOAP 请求一起发送?如果是这样,您可以在初始化 Savon 客户端时执行此操作(请参阅cannot set SOAP header parameters on savon call):

client = Savon.client(
    wsdl: SOAP_WSDL,
    endpoint: SOAP_URL,
    soap_header: { :username => username, :password => password }
)

顺便说一句,如果只有某些调用需要身份验证,您可以像这样进行调用:

response = client.call(
    :soap_call,
    :soap_header => { :username => username, :password => password },
    message: {message}
)
于 2014-02-06T12:35:00.047 回答
0

您可以尝试使用基本身份验证进行身份验证:

client = Savon::Client.new do
  wsdl.document = "http://services.blahblah.com/Service.asmx?WSDL"
  http.auth.basic "username", "password"
end
于 2013-03-14T13:30:02.897 回答
0
client = Savon.client( wsdl: 'http://service.example.com?wsdl',soap_header: { "AuthenticateRequest" => {"apiKey" => "****** your api *********"}}, pretty_print_xml: true)

client.operations

response = client.call(:function)

这里的“apiKey”是我用来验证 api 的婴儿车,你可以不一样

于 2015-07-18T06:49:52.510 回答