我对使用PHP的SOAP有基本的了解,但我希望这是一个"DUH"时刻。
我有一个WSDL文件,我用它从远程站点检索信息,并且一直这样使用它:-
$ordernumber = 171994;
$username = "someone@somewhere.com";
$password = "secret";
$arr = array("orderNumber" => $ordernumber,"orderReference" => '');
$client = new SoapClient(BASEPATH."/feed/Orders.wsdl",array('trace' => 1));
$orders = $client->RetrieveOrder ($username,$password,'',array("orderElements" => $arr));
这对于单次订单很好,我得到了我想要的信息。但是,如果我想检索多个订单,那么我将运行foreach循环,为每个订单发送单个请求。
根据文档,我应该能够提供订单数组并一次检索多个订单,并且,如果我使用在线工具http://soapclient.com/soaptest.html并输入多个订单,那么我将获得预期的结果。从soapclient.com生成的xml请求如下:-
<email xsi:type="xsd:string">someone@somewhere.com</email>
<password xsi:type="xsd:string">secret</password>
<messageHeader xsi:type="tns:messageHeaderElement">
<senderId xsi:type="xsd:string"/>
<receiverId xsi:type="xsd:string"/>
<messageId xsi:type="xsd:string"/>
<transactionId xsi:type="xsd:string"/>
<transactionTimeStamp xsi:type="xsd:dateTime"/>
</messageHeader>
<orderElements xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:queryElement[2]">
<item xsi:type="tns:queryElement">
<orderReference xsi:type="xsd:int"/>
<orderNumber xsi:type="xsd:int">171994</orderNumber>
</item>
<item xsi:type="tns:queryElement">
<orderReference xsi:type="xsd:int"/>
<orderNumber xsi:type="xsd:int">172101</orderNumber>
</item>
</orderElements>
messageHeader部分是可选的,我只是在上面的调用中发送"。
谁能告诉我如何使用PHP SOAPCLIENT,我可以发送多个订单的一个请求?
提前感谢您:-)
编辑:感谢@DeaconDesperado和@EM-Creations的回复。@DeaconDesperado是对的-我应该能够使用$client->VendaRetrieveOrder方法。我已经尝试了很多方法来生成orderElements数组,以下是最近的,在我眼中最接近的…
$orderElements =
Array
(
[0] => stdClass Object
(
[orderNumber] => 236431
[orderReference] =>
)
[1] => stdClass Object
(
[orderNumber] => 236431
[orderReference] =>
)
)
$orders = $client->VendaRetrieveOrder ($username,$password,'',array("orderElements" => $orderElements));
但是,当我使用它时,我会得到以下捕获错误:
SOAP-ERROR: Encoding: object hasn't 'orderReference' property
如果您计划在您提供的API中使用大量功能,请使用此
http://sourceforge.net/projects/wsdl2php/我在以前的项目中使用它,节省了我很多时间。