使用SAVON的Ruby SOAP客户端不工作,而PHP SOAP客户端工作

问题描述:

您好,我测试Web服务,我正在尝试使用我的wsdl编写一个使用SAVON的客户端。我有一个名为log_process的可用操作,我试图访问它,但得到错误。我有用PHP编写的类似脚本,它工作正常。我曾尝试使用SAVON的Ruby SOAP客户端不工作,而PHP SOAP客户端工作

require 'net/http' 
require "uri" 
require 'savon' 

client = Savon.client(wsdl: "http://abc.com/projects/shared/abc.wsdl") 

@a=client.operations 

puts @a 

ary={0 =>"art", 1 =>"bac", 2 =>"arr"} 

@result = client.call(:log_process, message:{0 =>"asdf", 1 =>"qwer", 2 =>"arr"}) 
puts @result 

并获得以下错误

raise_soap_and_http_errors'!(SOAP-ENV:客户端)错误的请求(萨翁::的SOAPFault)

我的PHP工作液外观这样

$结果= $客户机 - > log_process(阵列(0 => $ USER_NAME,1 => $ user_pwd,2 => $ display_type));

任何想法什么将是相当于这个ruby或我是否以正确的方式调用操作?

+0

你为什么叫'上)'操作的结果('log_process'?我猜你想要'client.log_process'。 –

+0

尝试过,以及尝试@result = client.call(:log_process,消息:{0 =>“asdf”,1 =>“asg”,2 =>“arr”}) –

+0

更新了问题现在我得到(SOAP-ENV:客户端)错误的请求(Savon :: SOAPFault) –

尝试:

@result = client.call(:log_process, message:["asdf", "asg", "arr"]) 

在PHP代码,你只发送1参数,其阵列

+0

我试过这个以及获得'raise_soap_and_http_errors!':(SOAP-ENV:Server)过程'字符串'不存在(Savon :: SOAPFault)错误 –

我知道这是晚了,但我在试图建立完全相同的问题使用savon到肥皂服务器的肥皂请求我已经广泛使用PHP肥皂服务器进行过工作。我发现另一个帖子与此有关,并且似乎添加了message_tag选项修复了它。

这是因为在我的情况下,WSDL是在XML期待functionNameRequest,但萨翁因为只有通过设置message_tagfunctionNameRequest发送funcionName> SOAP服务器能够正确地映射正在请求的功能。

这是线程帮助我引用如下https://github.com/savonrb/savon/issues/520相关代码:

嗨, 我只是分享此情况下,它是非常有用的。

我使用的是savon 2.3.0,我猜gem有一些问题,从我的wsdl中自动识别参数。我不知道SOAP,这是我第一次使用它。

我处理TradeTracker的WSDL

用下面的代码我得到它的工作:

client = Savon.client do 
    wsdl "http://ws.tradetracker.com/soap/affiliate?wsdl" 
    namespace_identifier :ns1 
end 

credentials = { 
    customerID: 123123, 
    passphrase: "123123123" 
} 

response = client.call(:authenticate, message_tag: :authenticate, message: credentials)