2010-05-06 5 views
0

Je suis en train de générer une requête XML SOAP qui ressemble à ceci:php5 client SOAP développement balises identiques

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dto="dto" xmlns:com=""> 
    <soapenv:Header> 
     <dto:AuthenticationDTO> 
    <dto:LOGIN_ID>login</dto:LOGIN_ID> 
    <dto:LOGIN_PASSWORD>login</dto:LOGIN_PASSWORD> 
    </dto:AuthenticationDTO> 
    </soapenv:Header> 
    <soapenv:Body> 
    <com:createAccount> 
    <com:AccountFields> 
     <!--Zero or more repetitions:--> 
     <dto:FieldDTO> 
      <!--Optional:--> 
      <dto:children/> 
      <!--Optional:--> 
      <dto:fieldType>GENERAL</dto:fieldType> 
      <!--Optional:--> 
      <dto:index>0</dto:index> 
      <!--Optional:--> 
      <dto:label>BusinessName</dto:label> 
      <!--Optional:--> 
      <dto:name>BizInfo-BusinessName</dto:name> 
      <!--Optional:--> 
      <dto:value>the business name</dto:value> 
     </dto:FieldDTO> 
     <!--Zero or more repetitions:--> 
     <dto:FieldDTO> 
      <!--Optional:--> 
      <dto:children/> 
      <!--Optional:--> 
      <dto:fieldType>GENERAL</dto:fieldType> 
      <!--Optional:--> 
      <dto:index>0</dto:index> 
      <!--Optional:--> 
      <dto:label>BusinessCountry</dto:label> 
      <!--Optional:--> 
      <dto:name>BizInfo-Country</dto:name> 
      <!--Optional:--> 
      <dto:value>US</dto:value> 
     </dto:FieldDTO> 
    </com:AccountFields> 
    <com:ApplicationNumber></com:ApplicationNumber> 
    <com:CreditTerms></com:CreditTerms> 
    <com:GenerateAccountIdIndicator>true</com:GenerateAccountIdIndicator> 
    </com:createAccount> 

je reçois une réponse en utilisant ce code:

$matchCompany->FieldList->FieldDTO->fieldType = 'GENERAL'; 
    $matchCompany->FieldList->FieldDTO->label = 'Business Name'; 
    $matchCompany->FieldList->FieldDTO->name = 'BizInfo-BusinessName'; 
    $matchCompany->FieldList->FieldDTO->index = '0'; 
try 
{ 
    $result = $soapClient->getAccountInfo($matchCompany);  
    print "<pre>"; 
    print_r($result); 
    print "</pre>"; 
    echo "REQUEST:\n" . htmlentities($soapClient->__getLastRequest()) . "\n"; 

} 
catch(SoapFault $fault) 
{ 
    echo $fault->faultcode . "-" . $fault->faultstring; 
    echo "REQUEST:\n" . htmlentities($soapClient->__getLastRequest()) . "\n"; 
} 

mais si j'essaie de ranger l'élément fielddto comme ceci:

//$matchCompany->FieldList->FieldDTO[]['fieldType'] = 'GENERAL'; 
//$matchCompany->FieldList->FieldDTO[]['label'] = 'Business Name'; 
//$matchCompany->FieldList->FieldDTO[]['name'] = 'BizInfo-BusinessName'; 
//$matchCompany->FieldList->FieldDTO[]['index'] = '0'; 

Il enrobe chaque élément dans sa propre balise FieldDTO au lieu de placer les quatre éléments dans une seule balise FieldDTO.

Qu'est-ce qui me manque? Il semble que cela devrait fonctionner, mais ce n'est pas tout à fait correct.

Répondre

2

Notez que chaque fois que vous exécutez $matchCompany->FieldList->FieldDTO[]['any_field'] l'index du tableau est augmenté d'une unité. Vous pouvez utiliser un index défini et incrémenté manuellement (par exemple $matchCompany->FieldList->FieldDTO[$i]['any_field'] = 'any_value') ou simplement définir toutes les valeurs en une seule fois:

$matchCompany->FieldList->FieldDTO[] = array(
    'fieldType' => 'GENERAL', 
    'label' => 'Business Name', 
    'name' => 'BizInfo-BusinessName', 
    'index' => '0' 
); 
+0

Parfait. Merci beaucoup. Je voterais, mais je suis trop nouveau pour voter la bonne réponse. –

+0

@Kevin Vous ne pourrez peut-être pas voter mais vous devriez pouvoir cliquer sur la coche juste sous les flèches haut/bas. – Samuel