2010-10-26 6 views
1

J'ai un tableau multidimensionnel, tels que:SOAP ne passant pas par tableau multidimensionnel

$array = array(
    'a' => 1, 
    'b' => 2, 
    'c' => array('42'=>'foo', '43'=>'bar'), 
    'd' => 4 
) 

Je suis en train de le nourrir dans un appel SOAP comme suit:

$response = $client->SomeFunction($array); 

La requête XML produit ignore 'c'. Pourquoi?

Répondre

0

J'ai compris la raison, mais ce n'était pas évident pour moi au départ.

Si le tableau ne correspond pas parfaitement à ce que le serveur attend, il ne sera pas mis dans le XML.

Par exemple, dans l'exemple ci-dessus, si le serveur attendait a, b et d mais pas c, c aurait tout simplement été ignorées et ne montrerait pas dans le fichier XML. C'est ce comportement qui était confus.

0

J'ai aussi eu ce problème. Il me donnera et erreur "Service indisponible". J'ai fait ce que tu as fait mais toujours erreur.

C'est ma demande:

POST /webservice/User.asmx HTTP/1.1 Host: www.sample.com.au Content-Type: text/xml; charset = utf-8 Content-Length: Longueur SOAPAction: "http://www.sample.com.au/UpdateUserBatch"

<UpdateUserBatch xmlns="http://www.sample.com.au/"> 
    <auth> 
    <Username>string</Username> 
    <Password>string</Password> 
    </auth> 
    <request> 
    <CreateIfNotExist>boolean</CreateIfNotExist> 
    <UpdateIfExists>boolean</UpdateIfExists> 
    <UserProfile> 
     <UserID>string</UserID> 
     <BusinessID>string</BusinessID> 
     <ExternalID>string</ExternalID> 
     <Username>string</Username> 
     <Password>string</Password> 
     <Addresses xsi:nil="true" /> 
     <Demographics xsi:nil="true" /> 
     <Roles xsi:nil="true" /> 
     </UserProfile> 
     <UserProfile> 
     <UserID>string</UserID> 
     <BusinessID>string</BusinessID> 
     <ExternalID>string</ExternalID> 
     <Username>string</Username> 
     <Password>string</Password> 
     <Addresses xsi:nil="true" /> 
     <Demographics xsi:nil="true" /> 
     <Roles xsi:nil="true" /> 
     </UserProfile> 
    </Users> 
    </request> 
</UpdateUserBatch> 

Et voici ma façon de passer son paramètre:

$param = array('username' => 'username', 'password' => 'password', 'request'=>array('CreateIfNotExist' => TRUE, 'UpdateIfExists' => FALSE), 'Users' => array('UserProfile'=> array('UserID' => 'usr123', 
'BusinessID' => 'bus123', 
'ExternalID' => 'ext123', 
'Username' => 'test', 
'Password' => 'testing' 
)));