我正在开发Rails 3并使用Savon(savonrb.com)
我可以连接,但无法获得authonticated ...
我使用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>
答案 0 :(得分: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}
)
答案 1 :(得分:0)
您可以尝试使用基本身份验证进行身份验证:
client = Savon::Client.new do
wsdl.document = "http://services.blahblah.com/Service.asmx?WSDL"
http.auth.basic "username", "password"
end
答案 2 :(得分: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)