2011-06-08 12 views
3

希望有人能幫助我解決這個問題。我使用下面的部分WSDL建設的NuSOAP客戶端:在nusoap和PHP中發送數據數組

 <s:element name="SavePrestaPicklist"> 
     <s:complexType> 
      <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="USERNAME" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="PASSWORD" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="BRANCH" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="CUSTOMERNUMBER" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="CUSTOMERPO" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="SHIPMETHOD" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="PRESTAPO" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="PICKITEMS" type="tns:ArrayOfPICKITEM" /> 
      </s:sequence> 
     </s:complexType> 
     </s:element> 
     <s:complexType name="ArrayOfPICKITEM"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="unbounded" name="PICKITEM" nillable="true" type="tns:PICKITEM" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="PICKITEM"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="PARTNUMBER" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="BRANCH" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="MFRCODE" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="QUANTITY" type="s:string" /> 
     </s:sequence> 
     </s:complexType> 

我的客戶是這樣的:

$orderdata = getorder('123'); 
    $orderdata = array(
     'USERNAME' => $config['export_username'], 
     'PASSWORD' => $config['export_password'], 
     'BRANCH' => '01', 
     'CUSTOMERNUMBER' => $data['order']['address1'], 
     'CUSTOMERPO' => $data['order']['gift_message'], 
     'SHIPMETHOD' => $shipMethod, 
     'PRESTAPO' => $data['order']['id_order']); 

     // Build the pickitems array of pickitem. 

     $pickitems = array(); 
     foreach($data['products'] as $item) { 

      $pickitem = array(
       'PARTNUMBER' => $item['name'], 
       'BRANCH' => '01', 
       'MFRCODE' => '642', 
       'QUANTITY' => $item['product_quantity']); 

      $pickitems[] = $pickitem; 
     } 
     $data['PICKITEMS'] = $pickitems; 

    $usingWsdl = true; 
    $client = new nusoap_client($config['export_wsdl'], $usingWsdl); 

    $response = $client->call('SavePrestaPicklist', $orderdata); 

這不是工作,併發送一個PICKITEMS這樣的:

<PICKITEMS> 
    <0> 
     <PARTNUMBER>BLAH</PARTNUMBER> 
     <BRANCH>BLAH</BRANCH> 
     ETC. 
    </0> 
    <1> 
     ANOTHER ITEM SET 
    </1> 
</PICKITEMS> 

我想要的是:

<PICKITEMS> 
    <PICKITEM> 
     <PARTNUMBER>BLAH</PARTNUMBER> 
     <BRANCH>BLAH</BRANCH> 
     ETC. 
    </PICKITEM> 
    <PICKITEM> 
     ANOTHER ITEM SET 
    </PICKITEM> 
</PICKITEMS> 

既然你不能在PHP中有重複的'PICKITEM'鍵,我不知道如何做到這一點。任何幫助,將不勝感激。

+0

什麼是您的服務器功能的結構SavePrestaPicklist?參數和類型的順序。您可以在客戶端序列化變量$ orderdata,然後在調用SavePrestaPicklist之前在服務器端反序列化它。 – satrun77 2011-07-20 01:47:42

回答

0
'PICKITEMS' => 
    array (
     'PICKITEM' => 
      array(
       0 => array('PARTNUMBER' => 'param1', 'BRANCH' => 'value1'), 
       1 => array('PARTNUMBER' => 'param2', 'BRANCH' => 'value2') 
     ) 
    ) 
+0

感謝您發佈此信息。我剛纔提出了這個解決方案,並忘記回答我自己的問題。 – 2013-05-07 13:08:34