Sono abituato a scrivere codice PHP, ma spesso non uso la codifica orientata agli oggetti. Ora ho bisogno di interagire con SOAP (come client) e non sono in grado di ottenere la sintassi corretta. Ho un file WSDL che mi permette di impostare correttamente una nuova connessione usando la classe SoapClient. Tuttavia, non sono in grado di effettuare effettivamente la chiamata giusta e ottenere la restituzione dei dati. Devo inviare i seguenti dati (semplificati):
- ID contatto
- Nome del contatto
- Descrizione generale
- Quantità
Esistono due funzioni definite nel documento WSDL, ma ne ho bisogno solo una ("FirstFunction" di seguito). Ecco lo script che eseguo per ottenere informazioni sulle funzioni e sui tipi disponibili:
$client = new SoapClient("http://example.com/webservices?wsdl");
var_dump($client->__getFunctions());
var_dump($client->__getTypes());
Ed ecco l'output che genera:
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"
}
Di 'che voglio fare una chiamata a FirstFunction con i dati:
- ID contatto: 100
- Nome di contatto: John
- Descrizione generale: barile di petrolio
- Importo: 500
Quale sarebbe la giusta sintassi? Ho provato molte opzioni, ma sembra che la struttura del sapone sia abbastanza flessibile, quindi ci sono molti modi per farlo. Neanche a capire dal manuale ...
AGGIORNAMENTO 1: campione provato da 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));
Ma ottengo questa risposta: Object has no 'Contact' property
. Come puoi vedere nell'output di getTypes()
, c'è un struct
chiamato Contact
, quindi suppongo che in qualche modo debba chiarire che i miei parametri includono i dati di contatto, ma la domanda è: come?
AGGIORNAMENTO 2: Ho provato anche queste strutture, stesso errore.
$params = array(
array(
"id" => 100,
"name" => "John",
),
"Barrel of Oil",
500,
);
Così come:
$params = array(
"Contact" => array(
"id" => 100,
"name" => "John",
),
"description" => "Barrel of Oil",
"amount" => 500,
);
Errore in entrambi i casi: l'oggetto non ha proprietà "Contact"