问题描述
我在轨道上使用savon gem来调用Purolator E-Ship肥皂API,
gem 'savon',version 2.12.0
@client = Savon.client(wsdl: "#{Rails.root.to_s}/app/carriers/wsdls/purolator/tracking_service/TrackingServiceDev.wsdl","soap_header" => {
"RequestContext" => {
"Version" => '1.2',"Language" => 'en_US',"GroupID" => 'xxx',"RequestReference" => 'rating Example'
}
},:basic_auth => ["xxxxxxxxxx","xxxxxxxxx"],:log => true,:pretty_print_xml => true,:element_form_default => :unqualified)
body = {
"PIN" => {
"Value" => 329014521622
}
}
@client.call(:get_delivery_details,message: body).body
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:q12="http://purolator.com/pws/service/v1" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ins0="http://purolator.com/pws/datatypes/v1" xmlns:ins1="http://www.microsoft.com/practices/EnterpriseLibrary/2007/01/wcf/validation" xmlns:ins2="http://schemas.datacontract.org/2004/07/Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF">
<env:Header>
<RequestContext>
<Version>1.2</Version>
<Language>en_US</Language>
<GroupID>xxx</GroupID>
<RequestReference>rating Example</RequestReference>
</RequestContext>
</env:Header>
<env:Body>
<q12:GetDeliveryDetailsRequest>
<PIN>
<Value>329014521622</Value>
</PIN>
</q12:GetDeliveryDetailsRequest>
</env:Body>
</env:Envelope>
这是我从API返回的响应
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring xml:lang="en-CA">Element 'RequestContext' is missing from the header</faultstring>
</s:Fault>
</s:Body>
</s:Envelope>
API引发错误消息,标题中缺少元素“ RequestContext”,但我提供了此标题,它也显示在请求中。 谁能给我指出正确的方向,让我知道我在这里想念的东西。
解决方法
添加命名空间时,它起作用:
'purolator:RequestContext' => {
'purolator:Version' => '1.2','purolator:Language' => 'en_US','purolator:GroupID' => 'xxx','purolator:RequestReference' => 'Rating Example'
}