Я звик писати PHP-код, але не часто використовую об'єктно-орієнтоване кодування. Зараз мені потрібно взаємодіяти з SOAP (як клієнтом) і я не в змозі правильно визначити синтаксис. У мене є файл WSDL, який дозволяє мені правильно встановити нове з'єднання за допомогою класу SoapClient. Однак я не можу насправді здійснити правильний дзвінок та повернути дані. Мені потрібно надіслати такі (спрощені) дані:
- Ідентифікатор контакту
- Контактна Особа
- Загальний опис
- Сума
У документі WSDL є дві функції, але мені потрібна лише одна ("FirstFunction" нижче). Ось сценарій, який я запускаю, щоб отримати інформацію про доступні функції та типи:
$client = new SoapClient("http://example.com/webservices?wsdl");
var_dump($client->__getFunctions());
var_dump($client->__getTypes());
А ось результат, який він генерує:
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"
}
Скажіть, я хочу зателефонувати на FirstFunction із даними:
- Контактний номер: 100
- Контактне ім'я: Джон
- Загальний опис: Барель нафти
- Сума: 500
Який би був правильний синтаксис? Я пробував всілякі варіанти, але, здається, структура мила досить гнучка, тому існує дуже багато способів зробити це. Не вдалося це зрозуміти і з посібника ...
ОНОВЛЕННЯ 1: випробуваний зразок з 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));
Але я отримую таку відповідь: Object has no 'Contact' property
. Як ви бачите на виході getTypes()
, є struct
дзвінок Contact
, тож я думаю, мені якось потрібно уточнити, що мої параметри включають Контактні дані, але питання: як?
ОНОВЛЕННЯ 2: Я також спробував ці структури, така ж помилка.
$params = array(
array(
"id" => 100,
"name" => "John",
),
"Barrel of Oil",
500,
);
Так само, як:
$params = array(
"Contact" => array(
"id" => 100,
"name" => "John",
),
"description" => "Barrel of Oil",
"amount" => 500,
);
Помилка в обох випадках: у об’єкта немає властивості "Контакт"