J'ai l'habitude d'écrire du code PHP, mais n'utilise pas souvent le codage orienté objet. Je dois maintenant interagir avec SOAP (en tant que client) et je ne parviens pas à obtenir la bonne syntaxe. J'ai un fichier WSDL qui me permet de configurer correctement une nouvelle connexion à l'aide de la classe SoapClient. Cependant, je ne suis pas en mesure de passer le bon appel et de récupérer les données. Je dois envoyer les données (simplifiées) suivantes:
- ID de contact
- Nom du contact
- Description générale
- Montant
Il y a deux fonctions définies dans le document WSDL, mais je n'en ai besoin que d'une ("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"
}
Dites que je veux appeler la FirstFunction avec les données:
- Identifiant du contact: 100
- Nom du 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 du savon soit assez flexible, il y a donc de très nombreuses façons de le faire. Impossible de le comprendre non plus dans le manuel ...
UPDATE 1: échantillon essayé 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 y a un struct
appelé Contact
, donc je suppose que je dois en quelque sorte préciser 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,
);
Aussi bien que:
$params = array(
"Contact" => array(
"id" => 100,
"name" => "John",
),
"description" => "Barrel of Oil",
"amount" => 500,
);
Erreur dans les deux cas: l'objet n'a pas de propriété 'Contact' '