2017-07-07 1 views
0

Je travaille sur un site web qui utilisera des API et rencontrera un problème. Quelqu'un pourrait m'aider s'il vous plaît? Il y a cette méthode appelée "createOrder", c'est-à-dire me tuer. Il est utilisé pour créer de l'ordre à un fournisseur, comme suit:SOAP WSDL - Comment créer un appel de travail pour une méthode spécifique en PHP

$id=$_POST['varname']; 
echo $id; 
$ilosc=$_POST['ilosc']; 
echo "</br> Zamawiana ilosć to :"; 
echo $ilosc; 
$orderInfo = $client->createOrder( 
array( 

    'description'=> 'OPIS', 
    'clientNr' => '025537', 
    'type' => 'FV_ZBIORCZA', 
    'transport' =>'AD', 
    'positions' => array(


    'id'=>$id, 
    'count'=>$ilosc 

    ) 

)) ; 

var_dump($orderInfo); 

Le problème est qu'il ne passe pas les « positions ». Il crée seulement une commande vide (avec ces quatre premiers paramètres). Le problème est à mon avis que ce bloc "positions" est conçu pour gérer plus d'un objet, il doit donc être écrit d'une manière différente.

Voici le code SOAP UI pour de l'aide. Il fonctionne avec seulement « id » et « count » rempli (et api_keys, ainsi bien sûr):

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://katalog.adpolska.pl/ws/api/1.0/"> 
    <soapenv:Header> 
     <personal_key>?</personal_key> 
     <kh_kod>?</kh_kod> 
     <api_key>?</api_key> 
    </soapenv:Header> 
    <soapenv:Body> 
     <ns:createOrder> 
     <order> 
      <!--You may enter the following 5 items in any order--> 
      <description>OPIS</description> 
      <clientNr>025537</clientNr> 
      <type>FV_ZBIORCZA</type> 
      <transport>AD</transport> 
      <positions> 
       <!--Zero or more repetitions:--> 
       <item> 
        <!--You may enter the following 4 items in any order--> 
        <productId> 
        <!--You may enter the following 2 items in any order--> 
        <id>824210</id> 
        <index></index> 
        </productId> 
        <count>2</count> 
        <error></error> 
        <errorMessage></errorMessage> 
       </item> 
      </positions> 
     </order> 
     </ns:createOrder> 
    </soapenv:Body> 
</soapenv:Envelope> 

Ci-dessous l'exemple de la documentation, mais cette documentation a tant d'erreurs que je ne regarde plus à elle, et il a également isnt de travail, mais donne l'idée:

$orderInfo = $client->__soapCall('createOrder', [ 
     'order' => [ 
       'description' =>'myDesc', 
       'clientNr' =>'my_cart_nr', 
       'type' =>'FV', 
       'transport' =>'AD', 
       'positions' => [ 
         [ 
           'id' =>'907972', 
           'count' => 1 
         ], 
         [ 
           'id' =>'908015', 
           'count' => 1 
         ] 
       ] 
     ] 
]); 

J'ai aussi utilisé quelque chose comme wsdltophp, et la structure extraite de cette fonction:

<?php 

Array 
(
    [0] => ADStructOrder Object 
     (
      [description] => OPIS 
      [clientNr] => 025537 
      [type] => FV_ZBIORCZA 
      [transport] => AD 
      [positions] => ADStructArrayOfOrderPosition Object 
       (
        [item] => Array 
         (
          [0] => ADStructOrderPosition Object 
           (
            [productId] => ADStructProductId Object 
             (
              [id] => 823514 
              [index] => 
             ) 
            [count] => 1 
            [error] => 
            [errorMessage] => 
           ) 
         ) 

       ) 
     ) 
?> 

Pourriez-vous s'il vous plaît aidez-moi à aCHIVE travail une solution? Merci d'avance.

Répondre

0

Comme je le vois, votre structure de données devrait être comme en

<?php 
$productId = [ 
    'id' => 824210, 
    'index' => '' 
]; 
$item = [ 
    'productId' => $productId, 
    'count' => 2, 
    'error' => '', 
    'errorMessage' => '' 
]; 
$positions = [ 
    'item' => [$item], 
]; 
$order = [ 
    'description'=> 'OPIS', 
    'clientNr' => '025537', 
    'type' => 'FV_ZBIORCZA', 
    'transport' =>'AD', 
    'positions' => $positions, 
]; 

$orderInfo = $client->createOrder($order); 

espère que cela aide