我的SOAP调用应该在<soap:Envelope>
中使用以下属性打开。
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:bar="http://postnl.nl/cif/services/BarcodeWebService/"
xmlns:tpp="http://postnl.nl/cif/domain/BarcodeWebService/">
如何将它们放在Savon那里?
答案 0 :(得分:0)
我找到了一个解决方案,我将用于所有的肥皂呼叫。我发现我可以简单地在ruby %Q{}
块和#{}
ruby插值中添加xml。
我的电话现在看起来像这样:
@run = Run.find_by(invoice_id: @invoice.id)
unless @run
@run = @invoice.runs.build( delivery: @delivery )
# (6.) Een PostNL SOAP-call wordt gemaakt.
@client_barcode = Savon.client(
:wsdl => 'https://testservice.postnl.com/CIF_SB/BarcodeWebService/1_1/?wsdl',
:log => true,
:pretty_print_xml => true
)
@response_barcode = @client_barcode.call( :generate_barcode, xml: %Q{
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bar="http://postnl.nl/cif/services/BarcodeWebService/" xmlns:tpp="http://postnl.nl/cif/domain/BarcodeWebService/">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>devc_!R4xc8p9</wsse:Username>
<wsse:Password>#{ENV['postnl_password']}</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<bar:GenerateBarcode>
<tpp:Message>
<tpp:MessageID>1</tpp:MessageID>
<tpp:MessageTimeStamp>02-05-2014 12:00:00</tpp:MessageTimeStamp>
</tpp:Message>
<tpp:Customer>
<tpp:CustomerCode>DEVC</tpp:CustomerCode>
<tpp:CustomerNumber>11223344</tpp:CustomerNumber>
</tpp:Customer>
<tpp:Barcode>
<tpp:Type>3S</tpp:Type>
<tpp:Range>DEVC</tpp:Range>
<tpp:Serie>000000000-999999999</tpp:Serie>
</tpp:Barcode>
</bar:GenerateBarcode>
</soapenv:Body>
</soapenv:Envelope>} ).to_hash
@run.barcode = @response_barcode[:generate_barcode_response][:barcode]
@run.save