0

我在使用 SAVON 3 on Rails 3 Web 应用程序的 Web 服务上有这种方法

<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])}

PS:我用soapUI进行了测试,服务正在运行......

4

2 回答 2

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 的文档由于其开发状态而变得稀疏,我不知道上面的代码有多可靠。如果这不是正确的方法,我会很高兴看到有人纠正我。

于 2014-03-13T15:46:18.283 回答
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)
于 2013-06-26T20:57:46.867 回答