2

我对使用 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
4

1 回答 1

0

如果您计划在您提供的 API 中使用很多功能,请使用此功能。

http://sourceforge.net/projects/wsdl2php/

我在以前的项目中使用它为我节省了很多时间。

于 2013-01-31T19:34:19.680 回答