WSDL:无法找出方法的参数

时间:2014-12-10 15:48:29

标签: php soap wsdl

我一直在谷歌上搜索两天而没有运气,希望直接问这个问题会有所帮助!

我正在与履行公司合作进行库存级别更新系统。我已经获得了wsdl地址和以下说明:

  

调用命令时,网站必须将命令名称传递给Web服务以及列表   参数。必须按以下方式格式化参数:

<params>
<ParamName>Value</ParamName>
<AnotherParam>Value</AnotherParam>
</params>
  

GetStock - 获取给定供应商的库存水平

     

参数数据类型注释

     

ClientCode字符串
  SupplierCode String留空或排除   客户所有库存水平的参数

<?xml version="1.0" encoding="utf-16"?>
<GetStock>
  <StockLevels>
    <Stock>
      <Sku>12848</Sku>
      <AltSku></AltSku>
      <SupplierCode>0044</SupplierCode>
      <Description>Australia Toggle £20 credit SIM</Description>
      <InStock>1</InStock>
      <Allocated>2</Allocated>
      <Available>17</Available>
      <Prices></Prices>
    </Stock>
  </StockLevels>
</GetStock>

我设法让我的SoapClient工作,验证并获取令牌(在收到验证错误后)。我无法调用GetStock,因此我使用了__getFunctions(),并认为我需要使用GetData()方法。

查找WSDL文件,我发现了以下内容:

<wsdl:operation name="GetData">
    <soap:operation soapAction="http://www.mnp-main.com/OMSConnect/IDataFeed/GetData" style="document"/>
    <wsdl:input>
        <soap:body use="literal"/>
    </wsdl:input>
    <wsdl:output>
        <soap:body use="literal"/>
    </wsdl:output>
</wsdl:operation>

现在我完全不知道该做什么!我知道GetStock不是一个可用的方法,所以它必须通过GetData完成,但我无法弄清楚要通过它的参数。

我唯一想到的是GetData的第二个参数是auth令牌,但是第一部分 - 无论我把它放在哪里都会产生以下消息:

  

预期名称空间“http://schemas.xmlsoap.org/soap/envelope/”中的结束元素“正文”。从命名空间''找到元素'param1'。第2行,第174位。

查看模式文件对我来说根本没有任何启示:(

如果我遗漏了一些非常明显的事情,我很抱歉,但我之前没有接受过这方面的培训,我遇到的所有教程似乎都在wsdl文件中有明确的方法名称和参数,不像我在这里

非常感谢你的帮助!

更新2:

这是__getFunctions和__getTypes结果:

array(7) {
  [0]=>
  string(59) "AuthenticateResponse Authenticate(Authenticate $parameters)"
  [1]=>
  string(44) "GetDataResponse GetData(GetData $parameters)"
  [2]=>
  string(74) "GetDataWithParamsResponse GetDataWithParams(GetDataWithParams $parameters)"
  [3]=>
  string(68) "ValidateSessionResponse ValidateSession(ValidateSession $parameters)"
  [4]=>
  string(53) "ClearCacheResponse ClearCache(ClearCache $parameters)"
  [5]=>
  string(53) "GetVersionResponse GetVersion(GetVersion $parameters)"
  [6]=>
  string(77) "GetImageWithResizeResponse GetImageWithResize(GetImageWithResize $parameters)"
}

对于GetData和GetDataWithParams:

[10]=>
  string(55) "struct GetData {
  string command;
  string tokenValue;
}"
[11]=>
  string(56) "struct GetDataResponse {
  ResultGetData GetDataResult;
}"
[12]=>
  string(85) "struct GetDataWithParams {
  string command;
  string parameters;
  string tokenValue;
}"
[13]=>
  string(76) "struct GetDataWithParamsResponse {
  ResultGetData GetDataWithParamsResult;
}"

1 个答案:

答案 0 :(得分:0)

经过多次试验和错误后,我终于开始工作了。基于文档,我认为我必须使用 GetDataWithParams 方法。所以看一下__getTypes结果:

[12]=>
  string(85) "struct GetDataWithParams {
  string command;
  string parameters;
  string tokenValue;
}"

我认为命令是GetStock; tokenValue是$ token。我无法解决的部分是参数,所以我做了一些试验和错误,并意识到它期望一个字符串值:基本上是原始的xml代码。

最终有效的是:

$params = new StdClass();
$params->command = 'GetStock';
$params->tokenValue = $token;
$params->parameters = "<params><ClientCode>{$this->clientCode}</ClientCode></params>";

或者采用数组格式:

$params = array(
    'command' => 'GetStock',
    'tokenValue' => $token,
    'parameters' => "<params><ClientCode>{$this->clientCode}</ClientCode></params>",
    );

感谢@Wrikken指出我正确的方向:)