Estou acostumado a escrever código PHP, mas não costumo usar codificação orientada a objetos. Agora preciso interagir com SOAP (como cliente) e não consigo obter a sintaxe correta. Eu tenho um arquivo WSDL que permite configurar corretamente uma nova conexão usando a classe SoapClient. No entanto, não consigo fazer a ligação correta e obter os dados retornados. Preciso enviar os seguintes dados (simplificados):
- ID do contato
- Nome de contato
- Descrição geral
- Montante
Existem duas funções definidas no documento WSDL, mas eu preciso apenas de uma ("FirstFunction" abaixo). Aqui está o script que eu corro para obter informações sobre as funções e tipos disponíveis:
$client = new SoapClient("http://example.com/webservices?wsdl");
var_dump($client->__getFunctions());
var_dump($client->__getTypes());
E aqui está a saída que ele gera:
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 eu queira fazer uma chamada para o FirstFunction com os dados:
- ID do contato: 100
- Nome do contato: John
- Descrição Geral: Barril of Oil
- Quantidade: 500
Qual seria a sintaxe correta? Eu tenho tentado todos os tipos de opções, mas parece que a estrutura do sabão é bastante flexível, então existem muitas maneiras de fazer isso. Também não consegui descobrir isso no manual ...
ATUALIZAÇÃO 1: amostra experimentada do 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));
Mas eu recebo esta resposta: Object has no 'Contact' property
. Como você pode ver na saída de getTypes()
, existe um struct
chamado Contact
, então eu acho que, de alguma forma, preciso esclarecer que meus parâmetros incluem os dados de contato, mas a pergunta é: como?
ATUALIZAÇÃO 2: Eu também tentei essas estruturas, mesmo erro.
$params = array(
array(
"id" => 100,
"name" => "John",
),
"Barrel of Oil",
500,
);
Assim como:
$params = array(
"Contact" => array(
"id" => 100,
"name" => "John",
),
"description" => "Barrel of Oil",
"amount" => 500,
);
Erro nos dois casos: o objeto não possui propriedade 'Contato'