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 structchamado 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'
