Я привык писать PHP-код, но не часто использую объектно-ориентированное кодирование. Теперь мне нужно взаимодействовать с SOAP (как клиент), и я не могу правильно понять синтаксис. У меня есть файл WSDL, который позволяет мне правильно настроить новое соединение с помощью класса SoapClient. Однако я не могу сделать правильный вызов и вернуть данные. Мне нужно отправить следующие (упрощенные) данные:
- Контактный ID
- Контактное лицо
- Общее описание
- Количество
В документе 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 с данными:
- Контактный ID: 100
- Контактное лицо: Джон
- Общее описание: бочка с маслом
- Количество: 500
Какой будет правильный синтаксис? Я пробовал всевозможные варианты, но оказалось, что структура мыла довольно гибкая, поэтому есть очень много способов сделать это. По мануалу тоже не понял ...
ОБНОВЛЕНИЕ 1: пробовал образец из ММК:
$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,
);
Ошибка в обоих случаях: объект не имеет свойства «Контакт».