我正在尝试学习如何使用SoapUI将Web服务集成到我的网站。我一直在尝试遵循PHP的文档,但这非常令人困惑。我的问题是:如何将该肥皂代码转换为PHP,所以可以调用SOAP函数。这是我到目前为止所得到的:
$wsdl = "http://api.rlcarriers.com/1.0.2/ShipmentTracingService.asmx?wsdl";
$request = [
'APIKey' => 'xxxxxxxxxxxxxxxxxxxxxx',
'traceNumbers' => $pro,
'TraceType' => 'PRO',
'FormatResults' => 'false',
'IncludeBlind' => 'false',
'OutputFormat' => 'Standard'
];
$client = new SoapClient($wsdl);
$result = $client->TraceShipment($request);
print_r($result);
但是,这不起作用。我不知道我在做什么错。感谢提供的任何帮助。我花了数小时试图找出答案,这让我发疯。这是我通过遵循以下wsdl文件而通过SoapUI获得的肥皂请求代码:http : //api.rlcarriers.com/1.0.2/ShipmentTracingService.asmx? wsdl
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:rlc="http://www.rlcarriers.com/">
<soap:Header/>
<soap:Body>
<rlc:TraceShipment>
<!--Optional:-->
<rlc:APIKey>******************</rlc:APIKey>
<!--Optional:-->
<rlc:request>
<!--Optional:-->
<rlc:TraceNumbers>
<!--Zero or more repetitions:-->
<rlc:string>143248716</rlc:string>
</rlc:TraceNumbers>
<rlc:TraceType>PRO</rlc:TraceType>
<rlc:FormatResults>false</rlc:FormatResults>
<rlc:IncludeBlind>false</rlc:IncludeBlind>
<rlc:OutputFormat>Standard</rlc:OutputFormat>
<!--Optional:-->
<rlc:CustomerData></rlc:CustomerData>
</rlc:request>
</rlc:TraceShipment>
</soap:Body>
</soap:Envelope>
第一个错误是将函数名称用作的方法SoapClient
。
正确的方法是使用本机方法SoapClient :: __ soapCall(),而函数名称则用作第一个参数,如下所示:
$client = new SoapClient($wsdl);
$result = $client->__call('TraceShipment', $request);
为了简化调试,请使用try ... catch块,该块使您可以访问服务器返回的消息:
try {
$result = $client->__soapCall('TraceShipment', $request);
} catch (Exception $e) {
print_r($e);
print_r($client);
}
第二个错误
参数$request
应为SoapServer接受的关联数组数组,即二级数组:
$request = [[
//...
]];
第三个错误
强制性参数是
<s:element minOccurs="0" maxOccurs="1" name="APIKey" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="request" type="tns:ShipmentTracingRequest"/>
因此,请按键更新$request
数组request
(根据Carlos帖子进行更新):
$request = [[
'APIKey' => 'xxxxxxxxxxxxxxxxxxxxxx',
'request' => [
'TraceNumbers' => [
'string' => $pro
],
'TraceType' => 'PRO',
'FormatResults' => 'false',
'IncludeBlind' => 'false',
'OutputFormat' => 'Standard'
]
]];
修复后,您将获得如下响应:
stdClass Object
(
[TraceShipmentResult] => stdClass Object
(
[WasSuccess] => 1
[Messages] => stdClass Object
(
)
[Result] => stdClass Object
(
)
)
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句