RubySavon集SOAP头元素

RubySavon集SOAP头元素,ruby,soap,savon,Ruby,Soap,Savon,我正试图使用Savon向SOAP头添加一个API键元素,但这是一场失败的战斗。我对Ruby还比较陌生,我所知道的一点是自学的。根据他们的API文档,我需要添加以下内容: 此ProductServe函数将返回(SOAP头)身份验证元素,并且必须随每个请求一起发送 参数 Required Name Type Description Min Occurs Max Occurs No sToken string

我正试图使用Savon向SOAP头添加一个API键元素,但这是一场失败的战斗。我对Ruby还比较陌生,我所知道的一点是自学的。根据他们的API文档,我需要添加以下内容: 此ProductServe函数将返回(SOAP头)身份验证元素,并且必须随每个请求一起发送

参数

Required  Name     Type    Description                              Min Occurs Max Occurs
No        sToken   string  Unique token to identify visitor.        0          1
Yes       sApiKey  string  User specific key to authenticate user.  1          1

我还没有找到任何类似于我想做的事情,这是我尝试过的代码:

endpoint = "http://v3.core.com.productserve.com/ProductServeService.wsdl"
client = Savon.client

response = client.request :urn, "getCategory" do
  soap.endpoint = endpoint
  soap.header = {
    "urn:sApiKey" => "xxxx"
  }
end

任何帮助都将不胜感激

看起来您需要配置Savon客户端:

client = Savon::Client.new do
  wsdl.document = endpoint
  wsdl.element_form_default = :unqualified
end
我做了这些更改,其余代码返回了一个有效的SOAP响应


无耻地抄袭

看起来您需要配置您的Savon客户端:

client = Savon::Client.new do
  wsdl.document = endpoint
  wsdl.element_form_default = :unqualified
end
我做了这些更改,其余代码返回了一个有效的SOAP响应


不知羞耻地抄袭了

请创建一个示例请求(您可以使用soapUI)或提供wsdl作为要点或粘贴。我是盲人:)这一点指向@LazyMonkeyI,我得到了错误:“Savon::Client#request至少需要一个参数”,但代码是:response=Client.request:urn,“getProductList”do soap.endpoint=endpoint soap.header={“sApiKey”=>“test”}end我知道这与原始问题无关,但尽管我会尝试省去问一个新问题,因为您已经回答了:)奇怪。通过查看中的guard子句可以看到,它只检查是否向
#request
方法传递了任何参数。我会使用调试器gem跟踪代码到guard子句,以查看发生了什么。问题的原因是我调用了client.request两次。因此,正如我应该怀疑的那样,这是我自己愚蠢的错误:请创建一个示例请求(您可以使用soapUI)或提供wsdl作为要点或粘贴。我是瞎子:)这一点指向@LazyMonkeyI,我得到了错误:“Savon::Client#request至少需要一个参数”,但代码是:response=Client.request:urn,“getProductList”do soap.endpoint=endpoint soap.header={“sApiKey”=>“test”}end我知道这与原始问题无关,但尽管我会尽量避免问一个新问题,因为您已经在这里回答了:)奇怪。通过查看中的guard子句可以看出,它只检查您是否将任何参数传递给了
#request
方法。我会使用调试器gem跟踪代码到guard子句,以看看发生了什么。问题原来是因为我给客户打了两次电话。请求。所以,正如我应该怀疑的那样,这是我自己的愚蠢错误:感谢百万绅士!感谢百万绅士!