Como fazer uma chamada PHP SOAP usando a classe SoapClient
Estou acostumado a escrever código PHP, mas não uso frequentemente codificação orientada a objetos. Agora preciso interagir com o SOAP (como cliente) e não consigo obter a sintaxe correta. Eu tenho um arquivo WSDL que me permite configurar corretamente uma nova conexão usando a classe SoapClient. No entanto, não consigo fazer a chamada certa e obter os dados retornados. Eu preciso enviar os seguintes dados (simplificados):
ID do contatoNome de contatoDescrição geralMontanteExistem duas funções definidas no documento WSDL, mas eu só preciso 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 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: 100Nome de Contato: JohnDescrição Geral: Barril de PetróleoQuantidade: 500Qual seria a sintaxe correta? Eu tenho tentado todos os tipos de opções, mas parece que a estrutura de sabão é bastante flexível, então há muitas maneiras de fazer isso. Não foi possível descobrir a partir do manual ...
UPDATE 1: tentou amostra 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));
Mas eu recebo esta resposta:Object has no 'Contact' property
. Como você pode ver na saída degetTypes()
, existe umstruct
chamadoContact
, então eu acho que de alguma forma preciso deixar claro meus parâmetros incluem os dados de contato, mas a questão é: como?
UPDATE 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 uma propriedade 'Contato'