Jestem przyzwyczajony do pisania kodu PHP, ale rzadko używam kodowania zorientowanego obiektowo. Teraz muszę współdziałać z SOAP (jako klient) i nie jestem w stanie uzyskać prawidłowej składni. Mam plik WSDL, który pozwala mi poprawnie skonfigurować nowe połączenie za pomocą klasy SoapClient. Jednak nie jestem w stanie wykonać właściwego połączenia i zwrócić danych. Muszę przesłać następujące (uproszczone) dane:
- Identyfikator kontaktu
- Nazwa Kontaktu
- Ogólny opis
- Ilość
W dokumencie WSDL zdefiniowano dwie funkcje, ale potrzebuję tylko jednej (poniżej „FirstFunction”). Oto skrypt, który uruchamiam, aby uzyskać informacje o dostępnych funkcjach i typach:
$client = new SoapClient("http://example.com/webservices?wsdl");
var_dump($client->__getFunctions());
var_dump($client->__getTypes());
A oto wynik, który generuje:
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"
}
Powiedz, że chcę zadzwonić do FirstFunction z danymi:
- Identyfikator kontaktu: 100
- Imię i nazwisko osoby kontaktowej: John
- Opis ogólny: Beczka oleju
- Kwota: 500
Jaka byłaby właściwa składnia? Próbowałem różnych opcji, ale wygląda na to, że struktura mydła jest dość elastyczna, więc jest na to wiele sposobów. Nie mogłem też tego rozgryźć na podstawie instrukcji ...
UPDATE 1: próbka z 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));
Ale mam tę odpowiedź: Object has no 'Contact' property
. Jak widać na wyjściu programu getTypes()
, pojawia się struct
wezwanie Contact
, więc myślę, że muszę jakoś wyjaśnić, że moje parametry obejmują dane kontaktowe, ale pytanie brzmi: jak?
UPDATE 2: Próbowałem też tych struktur, ten sam błąd.
$params = array(
array(
"id" => 100,
"name" => "John",
),
"Barrel of Oil",
500,
);
Jak również:
$params = array(
"Contact" => array(
"id" => 100,
"name" => "John",
),
"description" => "Barrel of Oil",
"amount" => 500,
);
Błąd w obu przypadkach: obiekt nie ma właściwości „Kontakt”