Estoy acostumbrado a escribir código PHP, pero a menudo no uso la codificación orientada a objetos. Ahora necesito interactuar con SOAP (como cliente) y no puedo obtener la sintaxis correcta. Tengo un archivo WSDL que me permite configurar correctamente una nueva conexión usando la clase SoapClient. Sin embargo, no puedo hacer la llamada correcta y obtener los datos devueltos. Necesito enviar los siguientes datos (simplificados):
- ID de contacto
- Nombre de contacto
- Descripción general
- Cantidad
Hay dos funciones definidas en el documento WSDL, pero solo necesito una ("Primera función" a continuación). Aquí está el script que ejecuto para obtener información sobre las funciones y tipos disponibles:
$client = new SoapClient("http://example.com/webservices?wsdl");
var_dump($client->__getFunctions());
var_dump($client->__getTypes());
Y aquí está la salida que 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"
}
Digamos que quiero hacer una llamada a FirstFunction con los datos:
- ID de contacto: 100
- Nombre de contacto: John
- Descripción general: Barril de petróleo
- Cantidad: 500
¿Cuál sería la sintaxis correcta? He estado probando todo tipo de opciones, pero parece que la estructura del jabón es bastante flexible, por lo que hay muchas maneras de hacerlo. No pude resolverlo del manual tampoco ...
ACTUALIZACIÓN 1: muestra probada de 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));
Pero me da esta respuesta: Object has no 'Contact' property
. Como puede ver en la salida de getTypes()
, hay un struct
llamado Contact
, así que supongo que de alguna manera necesito dejar en claro que mis parámetros incluyen los datos de contacto, pero la pregunta es: ¿cómo?
ACTUALIZACIÓN 2: También probé estas estructuras, el mismo error.
$params = array(
array(
"id" => 100,
"name" => "John",
),
"Barrel of Oil",
500,
);
Tanto como:
$params = array(
"Contact" => array(
"id" => 100,
"name" => "John",
),
"description" => "Barrel of Oil",
"amount" => 500,
);
Error en ambos casos: el objeto no tiene la propiedad 'Contacto'