Прежде всего вы должны знать функции и типы вашего мыльного веб-сервиса.С этим знанием вы можете С этим знанием вы можете оставить SoapClient для выполнения всей работы и просто вызвать функции с соответствующими типами.
Поскольку вы еще не объявили функции и типы вашего веб-сервиса,Я просто приведу очень простой пример.
Функции и типы
Как я уже говорил, вам следует взглянуть на функции и типы вашего веб-сервиса.,Для этого вы можете запустить клиентский объект мыла и распечатать все функции и типы.
<code>try {
$wsdl = 'https://path/to/your/webservice.wsdl';
$options = [
'cache_wsdl' => WSDL_CACHE_NONE,
'soap_version' => SOAP_1_2,
'trace' => true,
];
$client = new \SoapClient($wsdl, $options);
// print out all functions
echo "<pre>";
var_dump($client->__getFunctions());
echo "
"; // распечатать все типы echo"
";
var_dump($client->__getTypes());
echo "
";} catch (\ SoapFault $ fault) {// errorобработка}
Теперь вы можете программировать классы, которые представляют все типы веб-сервисов.
Структуры как классы
Предположим, тип дляGetAvailability
функция выглядит следующим образом.
GetAvailability(struct GetAvailabilty)
struct GetAvailability {
string strRequestXML
}
Структура Authenticate
может выглядеть следующим образом.
struct Authenticate {
int InterfaceCode
string InterfaceAuthKey
string AgentCode
string Password
}
Помните, что это предположение. Я действительно не знаю, какваши типы выглядят в реальности. Это всего лишь пример. Вы должны сами выяснить, какие типы и структуры используются вашим веб-сервисом с $client->__getTypes()
. С помощью этой информации вы можете программировать следующие классы.
declare(strict_types=1);
namespace Application\Structs;
class Authenticate
{
public $InterfaceCode;
public $InterfaceAuthKey;
public $AgentCode;
public $Password;
public function getInterfaceCode() : int
{
return $this->InterfaceCode;
}
public function setInterfaceCode(int $InterfaceCode) : Authenticate
{
$this->InterfaceCode = $InterfaceCode;
return $this;
}
public function getInterfaceAuthKey() : string
{
return $this->InterfaceAuthKey();
}
public function setInterfaceAuthKey(string $InterfaceAuthKey) : Authenticate
{
$this->InterfaceAuthKey = $InterfaceAuthKey;
return $this;
}
public function getAgentCode() : string
{
return $this->AgentCode;
}
public function setAgentCode(string $AgentCode) : Authenticate
{
$this->AgentCode = $AgentCode;
return $this;
}
public function getPassword() : string
{
return $this->Password;
}
public function setPassword(string $Password) : Authenticate
{
$this->Password = $Password;
return $this;
}
}
То же самое вы должны сделать для вашей GetAvailibity
структуры веб-сервиса.
declare(strict_types=1);
namespace Application\Structs;
class GetAvailability
{
public $strRequestXML;
public function getStrRequestXML() : string
{
return $this->strRequestXML;
}
public function setStrRequestXML(string $strRequestXML) : GetAvailability
{
$this->strRequestXML = $strRequestXML;
return $this;
}
}
Теперь у вас есть структуры веб-сервиса как классы php. Эти классы представляют типы, которые вы перечислили ранее с помощью метода $client->__getTypes()
У мыльного клиента php есть еще одна операцияНазывается classmap
.Опцию classmap можно использовать для отображения некоторых типов WSDL на классы PHP.Эта опция должна быть массивом с типами WSDL в качестве ключей и именами классов PHP в качестве значений.
Помните $options
, которое мы дали в качестве параметра мыльному клиенту?Просто разверните параметры вокруг параметра classmap.
$options = [
'cache_wsdl' => WSDL_CACHE_NONE,
'soap_version' => SOAP_1_2,
'trace' => true,
'classmap' => [
'Authenticate' => 'Application\Structs\Authenticate',
'GetAvailability' => 'Application\Structs\GetAvailability',
],
];
Просто запустите ваш мыльный клиент с этими параметрами.
** Вызов заголовка и функции *
Теперь, когда мы 'Мы сделали все приготовления, мы можем вызвать функцию.
// set the soap header
$authenticateStruct = (new \Application\Structs\Authenticate())
->setInterfaceCode(10)
->setInterfaceAuthKey('jskjks')
->setAgentCode('ggsjs2222')
->setPassword('abcd');
$header = new \SoapHeader(
'http://schemas.xmlsoap.org/soap/envelope/',
'Authenticate',
$authenticateStruct,
false
);
$client->__setSoapHeaders($header);
// function call
$getAvailabilityStruct = (new \Application\Structs\GetAvailability())
->setStrRequestXML($strRequestXML);
$result = $client->GetAvailability($getAvailabilityStruct);
Вот и все.Имейте в виду, что это всего лишь пример.