我一直在谷歌上搜索两天而没有运气,希望直接问这个问题会有所帮助!
我正在与履行公司合作进行库存级别更新系统。我已经获得了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;
}"
答案 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指出我正确的方向:)