Как я могу вызвать и установить параметр в заголовке и функции в SOAP API в PHP?

Я работаю только на 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

1

Решение

Прежде всего вы должны знать функции и типы вашего мыльного веб-сервиса. С этим знанием вы можете С этим знанием вы можете оставить 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);

Это все. Имейте в виду, что это всего лишь пример.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]