J'ai l'habitude d'écrire du code PHP, mais je n'utilise pas souvent le codage orienté objet. Je dois maintenant interagir avec SOAP (en tant que client) et je ne parviens pas à maîtriser la syntaxe. Je dispose d'un fichier WSDL qui me permet d'établir correctement une nouvelle connexion à l'aide de la classe SoapClient. Cependant, je ne parviens pas à effectuer l'appel correct et à obtenir des données en retour. J'ai besoin d'envoyer les données suivantes (simplifiées) :
- Numéro de contact
- Nom du contact
- Description générale
- Montant
Il y a deux fonctions définies dans le document WSDL, mais je n'ai besoin que d'une seule ("FirstFunction" ci-dessous). Voici le script que j'exécute pour obtenir des informations sur les fonctions et les types disponibles :
$client = new SoapClient("http://example.com/webservices?wsdl");
var_dump($client->__getFunctions());
var_dump($client->__getTypes());
Et voici la sortie qu'il génère :
array(
[0] => "FirstFunction Function1(FirstFunction $parameters)",
[1] => "SecondFunction Function2(SecondFunction $parameters)",
);
array(
[0] => struct Contact {
id id;
name name;
}
[1] => string "string description"
[2] => string "int amount"
}
Disons que je veux faire un appel à la FirstFunction avec les données :
- ID de contact : 100
- Nom de contact : John
- Description générale : Baril de pétrole
- Montant : 500
Quelle serait la bonne syntaxe ? J'ai essayé toutes sortes d'options, mais il semble que la structure des savons soit assez flexible et qu'il y ait de nombreuses façons de procéder. Je n'ai pas non plus réussi à trouver la solution dans le manuel...
UPDATE 1 : essayé l'échantillon de MMK :
$client = new SoapClient("http://example.com/webservices?wsdl");
$params = array(
"id" => 100,
"name" => "John",
"description" => "Barrel of Oil",
"amount" => 500,
);
$response = $client->__soapCall("Function1", array($params));
Mais je reçois cette réponse : Object has no 'Contact' property
. Comme vous pouvez le voir dans la sortie de getTypes()
il existe un struct
appelé Contact
J'imagine donc que je dois faire en sorte que mes paramètres incluent les données de contact, mais la question est : comment ?
MISE À JOUR 2 : J'ai également essayé ces structures, même erreur.
$params = array(
array(
"id" => 100,
"name" => "John",
),
"Barrel of Oil",
500,
);
Ainsi que :
$params = array(
"Contact" => array(
"id" => 100,
"name" => "John",
),
"description" => "Barrel of Oil",
"amount" => 500,
);
Erreur dans les deux cas : Object has no 'Contact' property