我在我正在使用的Web服务上使用此方法,在Rails 3 Web应用程序上使用SAVON 3
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:gpa="http://schemas.datacontract.org/2004/07/Gpa.Comercio.Servicos.Contracts.DTO">
<soapenv:Header/>
<soapenv:Body>
<tem:CalcularCarrinho>
<!--Optional:-->
<tem:carrinho>
<!--Optional:-->
<gpa:CEP>parameter here</gpa:CEP>
<!--Optional:-->
<gpa:CNPJ>parameter here</gpa:CNPJ>
<!--Optional:-->
<gpa:IdCampanha> parameter here </gpa:IdCampanha>
<!--Optional:-->
<gpa:Produtos>
<!--Zero or more repetitions:-->
<gpa:DadosListaProdutoCarrinhoDTO>
<!--Optional:-->
<gpa:Codigo> parameter here </gpa:Codigo>
<!--Optional:-->
<gpa:Quantidade>parameter here</gpa:Quantidade>
</gpa:DadosListaProdutoCarrinhoDTO>
</gpa:Produtos>
</tem:carrinho>
</tem:CalcularCarrinho>
</soapenv:Body>
</soapenv:Envelope>
考虑到“Produtos”参数是一个数组,我该如何调用这个方法? 我试过了:
client.call(:calcular_carrinho){message(id_campanha: 2543, cnpj: '93.528.261/0001-60', cep: '04080013', produtos: ['379457', 1])}
P.S:我用soapUI进行测试,服务正在运行......
答案 0 :(得分:0)
我解决了这个问题!
对此方法的调用:
client = Savon.client(wsdl: "webserviceadress?wsdl")
message = { :carrinho => {cep: '04080013',cnpj: '93.528.261/0001-60', id_campanha: 2543, :produtos => {:dados_lista_produto_carrinho_dto => {codigo: '379457', quantidade: 1}}}}
calc_carrinho = client.call(:method_name, message: message)
答案 1 :(得分:0)
根据你的问题陈述,我假设你想使用gem Savon的第3版。 Savon 3的语法接口与2.x中使用的语法接口不同。
您需要先创建一个Savon-Object,然后使用相应的服务/端口数据创建一个operation
。
client = Savon.new('http://link_to_your_wsdl_here')
operation = client.operation('ServiceName', 'Port', 'custom_action_here')
operation.body = { message: {} }
您可以在operation.call
之后启动请求。
由于Savon 3的文档由于其开发状态而稀疏,我不知道上面的代码是多么可靠。如果不是正确的方式,我会很高兴看到有人纠正我。