2

私はPHPを使用したSOAPの基本的な知識を持っていますが、それらの「DUH」の瞬間の1つであることが判明したいと思っていることに固執しています。

リモートサイトから情報を取得するために使用する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ループを実行して、注文ごとに1つのリクエストを送信しています。

ドキュメントによると、一連の注文を提供し、一度に複数の注文を取得できるはずです。オンラインツール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を使用して、複数の注文に対して1つのリクエストを送信する方法を教えてもらえますか?

よろしくお願いします :-)

編集:

@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 に答える