Заранее благодарим вас за то, что вы обновили свой вопрос недостающими данными. Этот пример является собственным примером php, который показывает, как работать с мыльными функциями и типами объектно-ориентированным способом.
1. Типы и классы
Как вы можете видеть в массиве типов, есть несколько типов, объявленных как struct . Если вы хотите так сказать, структуры могут называться классами PHP. Итак, давайте создадим один класс php из каждой структуры.
class EzCredentialStruct
{
public $AgentCode;
public $HashedPassword;
public $Username;
public function getAgentCode() : string
{
return $this->AgentCode;
}
public function setAgentCode(string $AgentCode) : EzCredentialStruct
{
$this->AgentCode = $AgentCode;
return $this;
}
public function getHashedPassword() : string
{
return $this->HashedPassword;
}
public function setHashedPassword(string $HashedPassword) : EzCredentialStruct
{
$this->HashedPassword = $HashedPassword;
return $this;
}
public function getUsername() : string
{
return $this->Username;
}
public function setUsername(string $Username) : EzCredentialStruct
{
$this->Username = $Username;
return $this;
}
}
class GetLocalRatesStruct
{
public $credentials;
public $payincurcode;
public $transferType;
public function getCredentials() : EzCredentialStruct
{
return $this->credentials;
}
public function setCredentials(EzCredentialStruct $credentials) : GetLocalRatesStruct
{
$this->credentials = $credentials;
return $this;
}
public function getPayincurcode() : string
{
return $this->payincurcode;
}
public function setPayincurcode(string $payincurcode) : GetLocalRatesStruct
{
$this->payincurcode = $payincurcode;
return $this;
}
public function getTransferType() : string
{
return $this->transferType;
}
public function setTransferType(string $transferType) : GetLocalRatesStruct
{
$this->transferType = $transferType;
return $this;
}
}
Эти два класса являются примерами всех структур из вашего массива типов. Поэтому запишите все свои структуры как классы. Вы заметите выгоду позже.
2. Soap Client и опция карты классов
Теперь, когда мы объявили используемые типы веб-службы в качестве классов, мы можем запустить мыльный клиент. Важно запустить клиент мыла с правильными опциями. Всегда заключайте клиента в блок try / catch.
try {
$options = [
'cache_wsdl' => WSDL_CACHE_NONE,
'soap_version' => SOAP_1_2,
'trace' => true,
'classmap' => [
'EzCredential' => 'EzCredentialStruct',
'GetLocalRates' => 'GetLocalRatesStruct',
],
];
$wsdl = 'path/to/the/webservice/endpoint?wsdl';
$client = new \SoapClient(
$wsdl,
$options,
);
} catch (\SoapFault $e) {
// error handling
}
КАК вы можете видеть, что в массиве опций есть ключ classmap
. Карта классов направляет типы к определенным классам php. В этом примере мы используем только два примера типов классов, которые мы определили ранее. Теперь мыльный клиент может автоматически создавать строку xml, необходимую для веб-службы.
3. Положите все вместе
Теперь, когда у нас есть все, что нужно для правильного запроса мыла, наш код должен выглядеть следующим образом.
$credentials = (new EzCredentialStruct())
->setAgentCode($agentCode)
->setHashedPassword($hashedPassword)
->setUsername($username);
$request = (new GetLocalRatesStruct())
->setCredentials($credentials)
->setPayincurcode($code)
->setTransferType($transferType);
$result = $client->GetLocalRates($request);
Заключение
На первый взгляд такой подход может показаться более трудоемким. Но имеет смысл отделить типы от функций и классов программирования для каждой структуры, которую объявляет веб-служба. Вызов функции веб-сервиса будет проще, потому что мы только передаем объект в качестве параметра. Нет больше странных конструкций массива. Все на своем месте и может быть использовано повторно.
PS: этот код не проверен. Не рекомендуется использовать его в производстве. Этот код предназначен только для примера. Может содержать ошибки.