В общем случае для каждого сервиса должно быть реализовано два класса:
-
Класс, отвечающий за работу с сервисом и реализующий интерфейс
\pelican\services\interfaces\Service
, -
Класс отвечающий за представление данных ответа от сервиса и реализующий интерфейс
\pelican\services\interfaces\Result
.
-
Сервисы должны иметь свое пространство имен внутри пространства имен
\pelican\services\
. Например,\pelican\services\portbilet
или\pelican\services\gloria
. -
Базовый класс сервиса должен называться
Service
. Например,\pelican\services\portbilet\Service
. -
Базовый класс данных ответа сервиса должен называться
Result
. Например,\pelican\services\portbilet\Result
. -
Каждый сервис должен быть реализован отдельным пакетом для composer, который будет иметь в зависимостях данный пакет.
-
Сервисы должны сами перехватывать все исключения и не выбрасывать их далее.
//инициируем объект сервиса
$service = new \pelican\services\portbilet\Service;
//конфигурируем объект сервиса
$service->setOptions([
'wsdl' => '...',
'login' => '...',
'password' => '...',
]);
//получим список доступных вылетов из тюмени за текущую дату
$request = new \pelican\services\Request('get_flights', [
'from' => 'tmn',
'date' => date('Y-m-d'),
]);
$response = new \pelican\services\ResponseList;
$service->queryAll($request, $response);
//далее, согласно какой-либо бизнес логике сайта выбираем нужный перелет
$flight = $response[17];
//забронируем билет на данный перелет
$request = new \pelican\services\Request('order_flight', [
'flight' => $flight,
'user' => Yii::$app->user,
]);
$response = new \pelican\services\Response;
$service->query($request, $response);
//проверяем результат
if ($response->getErrorCode() === null) {
echo 'Перелет успешно забронирован!';
} else {
echo 'Произошла ошибка: ' . $response->getErrorMessage();
}