Я работаю только на Rest API, и я новичок в SOAP API, я интегрирую сторонний API, разработанный на SOAP API?
Как я могу назвать его функцией «GetAvailibility», а также заголовком и установить параметр?
THIRD PARTY XML CODE:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<Authenticate xmlns="http://tempuri.org/">
<InterfaceCode>10</InterfaceCode>
<InterfaceAuthKey>jskjks</InterfaceAuthKey>
<AgentCode>ggsjs2222</AgentCode>
<Password>abcd</Password>
</Authenticate>
</soap:Header>
<soap:Body>
<GetAvailibility xmlns="http://tempuri.org/">
<strRequestXML>string</strRequestXML>
</GetAvailibility>
</soap:Body>
</soap:Envelop
Прежде всего вы должны знать функции и типы вашего мыльного веб-сервиса. С этим знанием вы можете С этим знанием вы можете оставить SoapClient, чтобы сделать всю работу, и просто нужно вызывать функции с соответствующими типами.
Поскольку вы еще не объявили о функциях и типах своего веб-сервиса, я приведу очень простой пример.
Функции и типы
Как я уже говорил, вы должны взглянуть на функции и типы вашего веб-сервиса. Для этого вы можете инициировать объект мыльного клиента и распечатать все функции и типы.
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 "</pre>";
// print out all types
echo "<pre>";
var_dump($client->__getTypes());
echo "</pre>";
} catch (\SoapFault $fault) {
// error handling
}
Теперь вы можете программировать классы, которые представляют все типы веб-сервисов.
Структуры как классы
Предположим, тип для 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);
Это все. Имейте в виду, что это всего лишь пример.
Других решений пока нет …