Я хочу взаимодействовать с SOAP (как клиент) и не могу получить правильный синтаксис для входных параметров. У меня есть URL-адрес WSDL, который я протестировал с SoapUI, и он возвращает результат правильно. В WSDL определены две функции, но мне нужна только одна («Первая функция» ниже). Вот скрипт, который я запускаю, чтобы получить информацию о доступных функциях и типах:
$client = new SoapClient("http://example.com/webservices?wsdl");
var_dump($client->__getFunctions());
var_dump($client->__getTypes());
И вот результат, который он генерирует:
array(
[0] => "FirstFunction Function1(FirstFunction $parameters)",
[1] => "SecondFunction Function2(SecondFunction $parameters)",
);
struct Amount {
anyURI Identifier;
Information charge;
string referenceCode;
}
struct Information {
string description;
decimal amount;
string code;
}
В соответствии с приведенным выше результатом я разработал мой клиент с nusoap
а также php
как показано ниже:
class Information
{
public $description;
public $amount;
public $code;
}
class Amount {
public $Identifier;
public $charge;
public $referenceCode;
}
$charge = new Information();
$charge->description = "ROUTE=XXX|abc=".$code;
$charge->amount = "NULL";
$charge->code = $chargecode;
$params = new Amount();
$params->Identifier =$num;
$params->charge = $charge;
$params->referenceCode = $refcode;
$header = new SoapHeader('key', $key);
$client->__setSoapHeaders($header);try
{
$res = $client->__call('charge',array('parametrs'=>$params));
print_r($res->return);
}
catch(PDOException $e)
{
print_r($e->getMessage());
}
В результате я получаю следующую ошибку:
Uncaught SoapFault exception: [soapenv:Server] unknown
На мой взгляд, лучший способ добиться этого — использовать генератор WSDL для php, такой как PackageGenerator проект. Он абстрагирует весь процесс, поэтому вы имеете дело только с объектами, не беспокоясь о SOAP.
Других решений пока нет …