Я привык писать PHP-код, но не часто использую объектно-ориентированное кодирование. Теперь мне нужно взаимодействовать с SOAP (как клиент), и я не могу правильно получить синтаксис. У меня есть файл WSDL, который позволяет мне правильно настроить новое соединение с использованием класса SoapClient. Тем не менее, я не могу сделать правильный звонок и вернуть данные. Мне нужно отправить следующие (упрощенные) данные:
- Contact ID
- Контактное имя
- Общее описание
- Сумма
В документе WSDL есть две функции, но мне нужен только один ( "FirstFunction" ниже). Вот script, который я запускаю, чтобы получить информацию о доступных функциях и типах:
$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 с данными:
- Contact ID: 100
- Контактное лицо: John
- Общее описание: Barrel of Oil
- Сумма: 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, поэтому, я думаю, мне почему-то нужно уточнить, что мои параметры включают данные 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,
);
Ошибка в обоих случаях: объект не имеет свойства "Контакт"

