PHPackages                             xeops/iiko-exchange - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. xeops/iiko-exchange

ActiveProject

xeops/iiko-exchange
===================

34.4k↓100%3PHP

Since Oct 5Pushed 1y ago2 watchersCompare

[ Source](https://github.com/xeops/iikoExchange)[ Packagist](https://packagist.org/packages/xeops/iiko-exchange)[ RSS](/packages/xeops-iiko-exchange/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (10)Used By (0)

[![Build Status](https://camo.githubusercontent.com/549cb44177a1e5355a128a0f6210c93cc672b001047646441859d36aac7d0a43/68747470733a2f2f7472617669732d63692e6f72672f78656f70732f69696b6f2d65786368616e67652e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/xeops/iiko-exchange)[![Total Downloads](https://camo.githubusercontent.com/fc4c37709879a2d4f7b65b7ce5ac803669ba113795625f835576770387f630bb/68747470733a2f2f706f7365722e707567782e6f72672f78656f70732f69696b6f2d65786368616e67652f642f746f74616c2e737667)](https://packagist.org/packages/xeops/iiko-exchange)[![Latest Stable Version](https://camo.githubusercontent.com/a10a48c9f41b19ef31d8f131aad3ea6a65d4404a221576400ff38ef8441fba95/68747470733a2f2f706f7365722e707567782e6f72672f78656f70732f69696b6f2d65786368616e67652f762f737461626c652e737667)](https://packagist.org/packages/xeops/iiko-exchange)[![License](https://camo.githubusercontent.com/31b206b13cde53f1f8174eae55a9644496ff30863a9d945f10dbc55cc8b90cbe/68747470733a2f2f706f7365722e707567782e6f72672f78656f70732f69696b6f2d65786368616e67652f6c6963656e73652e737667)](https://packagist.org/packages/xeops/iiko-exchange)[![Latest Unstable Version](https://camo.githubusercontent.com/6fb35c51c62da29e185541f07a453d58b4ef9e2bbde9f3673ca7bb5e5547ab38/68747470733a2f2f706f7365722e707567782e6f72672f78656f70732f69696b6f2d65786368616e67652f762f756e737461626c65)](//packagist.org/packages/xeops/iiko-exchange)

iiko data exchange library
--------------------------

[](#iiko-data-exchange-library)

Данная библиотека представляет собой [ETL](https://en.wikipedia.org/wiki/Extract,_transform,_load)процесс для интеграции iiko c внешними системами посредством сервера iikoWeb.

Суть интеграции состоит в плановом **одностороннем** обмене данных между iiko и внешней системой.

```
        /-------------/         /----------------/
       /    iiko     / ----->  / 3d paty system /
      /-------------/         /----------------/

```

*Возможен обмен в обратном порядке ( 3d paty system -&gt; iiko )*

Процесс разработки обмена следующий

1. Создается проект, использующий данную библиотеку
2. Проект проходит аудит и ревью разработчиками iikoWeb
3. Проект включается в продукт iikoWeb посредством [composer](https://getcomposer.org/)

Процесс работы обмена

1. Пользователь открывает frontend приложение Exchange, написанное на Angular
2. Приложение запрашивает все возможные типы обменов у сервера iikoWeb
3. Пользователь создает обмен, указывая имя и рестораны, для которых оно будет работать. На данном этапе рестораны могут быть не указаны, и тогда будут работать все, что есть в сети.
4. Пользователь вводит настройки подключения к внешней системе
5. Пользователь заполняет все настройки и сопоставления (мапинги) согласно документации и/или подсказкам.
6. Пользователь настраивает расписание
7. После сохранения расписания, согласно ему создается задание на сервере iikoWeb.
8. При наступлении времени исполнения, iikoWeb запускает процесс обмена, заполняя его всеми необходимыми настройками и сопоставлениями.

Первые шаги
-----------

[](#первые-шаги)

### Создание проекта

[](#создание-проекта)

Необходимо создать проект со следующей директорией папок

```
AcmeExchangeBundle
│
├── src
│   ├── Formatter
│   ├── Loader
│   ├── Mapping
│   ├── OptionSet(?)
│   ├── Request
│   ├── Resources
│   │   ├── config
│   │   │   └── services.yml
│   │   └── view
│   │       └── preview.html.twig
│   └── Transformer
├── Tests
│   └── *****
└── README.md

```

### Инициализация проекта

[](#инициализация-проекта)

Процесс инициализации проекта описан в [отдельной статье](./docs/iikoGitLabComposer.md)

### Подключение библиотеки

[](#подключение-библиотеки)

```
composer require xeops/iiko-exchange
```

### Реализация

[](#реализация)

#### 1. Инициализация сервиса Обмена

[](#1-инициализация-сервиса-обмена)

Первым делом необходимо в services.yml создать сервис [**обмена**](./docs/Exchange.md)

```
    exchange.acme:
        # Собственный класс можно не создавать, базовый класс содержит всю необходимую реализацию
        class: iikoExchangeBundle\Exchange\Exchange
        # в качестве аргумента необходимо передать уникальный код обмена, который будет использоваться для переводов и получения настроек
        # чтобы гарантировать уникальность - используйте названия внешней системы, с которой вы интегрируетесь и способ
        arguments: [ 'ACME_OLAP_TO_FTP_EXCHANGE_CODE' ]
        calls:
            # задайте расписание, с помощью которого обмен будет запускать в автоматическом режиме
            - [ setSchedules,[ [ '@exchange.schedule.cron' ] ] ]
            # задайте шаблон, с помощью которого будет выводиться превью выгрузки
            - [ setPreviewTemplate, [ 'AcmeExchangeBundle::preview.html.twig' ] ]
        # без тегирования система не узнает о том, что вы подключили новый механизм обмена
        tags:
            - { name: "exchange" }
```

! не забудьте добавить первой строкой в services.yml

```
services:
    # начиная от этого отступа объявляйте сервисы
```

#### 2. Создание соединения с внешней системой

[](#2-создание-соединения-с-внешней-системой)

Есть несколько типов подключения

- [iiko](./docs/iiko/IikoConnection.md)
- [OAuth2](./docs/connection/OAuth2Connection.md)
- [FTP/SFTP](./docs/connection/FTPConnection.md)

Для создания своего типа используйте [базовый класс](./src/Library/Connection/Connection.php)После создайте сервис и подключите его к уже созданному сервису обмена

```
# Создание соединения
    exchange.acme.connection:
        class: AcmeExchangeBundle\Loader\AcmeOAuth2Connection
        arguments: [ 'ACME_CONNECTION', '@exchange.storage.session', '@logger' ]
        tags:
            - { name: "exchange.connection" }
```

```
# подключение соединения
    exchange.acme:
        class: iikoExchangeBundle\Exchange\Exchange
        .....
        calls:
            ......
            # для добавления соединения просто добавьте строчку ниже в уже существующий массив calls созданного сервиса обмена
            - [ setLoader, [ '@exchange.acme.connection' ] ]
            ......
        ........
```

Для подключения соединения с iiko просто подключите уже созданный сервис соединения

```
# подключение соединения к iiko
    exchange.acme:
        class: iikoExchangeBundle\Exchange\Exchange
        .....
        calls:
            ......
            # для добавления соединения просто добавьте строчку ниже в уже существующий массив calls созданного сервиса обмена
            - [ setExtractor, [ '@exchange.connection.iiko' ] ]
            ......
        ........
```

В данном примере используется направление `iiko -> 3d party system`. Если нужна выгрузка в обратную сторону, соединения нужно поменять местами.

#### 3. Создание движков

[](#3-создание-движков)

Под каждую задачу в рамках одного процесса выгрузки создайте [**движок**](./docs/Engines.md)Создайте для каждого движка сервис

```
    exchange.acme.engine:
        # Собственный класс можно не создавать, базовый класс содержит всю необходимую реализацию
        class: iikoExchangeBundle\Engine\ExchangeEngine
        # В качестве аргумента необходимо передать уникальный код движка
        arguments: [ 'ACME_SALES' ]
```

#### 3.1 Создание запросов

[](#31-создание-запросов)

Каждый движок опеределяется уникальным набором [запросов](./docs/Request.md) и механизмом трансформации ( [трансформер](./docs/Transformer.md) и [форматор](./docs/Formatter.md))

```
    exchange.acme.request.sales:
        class: Exchange\AcmeExchangeBundle\Request\SalesRequest
        arguments: [ 'ACME_SALES_REQUEST' ]
```

#### 3.2 Создание трансформера

[](#32-создание-трансформера)

После выполнения [запросов](./docs/Request.md) к внешней системе, данные должны быть очищены и преобразованы в бизнес модель системы, в которую данные будут выгружены с помощью [трансформера](./docs/Transformer.md).

```
    exchange.acme.transformer.sales:
        class: Exchange\AcmeExchangeBundle\Transformer\SalesTransformer
        arguments: [ 'ACME_TRANSFORMER_SALES']
```

#### 3.3 Создание форматера

[](#33-создание-форматера)

После [трансформации](./docs/Transformer.md) данных в бизнес модель, эти данные необходимо отформатировать в запрос, принимаемой принимающей стороной. Для этого необходимо реализовать [форматер](./docs/Formatter.md)

```
    exchange.acme.formatter.sales:
        class: Exchange\AcmeExchangeBundle\Formatter\SalesFormatter
        arguments: [ 'ACME_FORMATTER_SALES' ]
```

#### 3.4 подключение модулей движка

[](#34-подключение-модулей-движка)

После реализации [запросов](./docs/Request.md), [трансформера](./docs/Transformer.md) и [форматера](./docs/Formatter.md)сервисы нужно подключить в качестве модулей в движок, который собирается их использовать

```
    exchange.acme.engine:
        class: iikoExchangeBundle\Engine\ExchangeEngine
        ....
        calls:
            # Запросы подключаются массивом, т.к. данные от запросов аккумулируются и передаются массивом в трансформацию
            - [ setRequests, [ [ '@exchange.acme.request.sales' ] ] ]
            - [ setFormatter, [ '@exchange.acme.formatter.sales' ] ]
            - [ setTransformer, [ '@exchange.acme.transformer.sales' ] ]
```

### Создание и использование расширений

[](#создание-и-использование-расширений)

На каждом этапе выгрузки может потребоваться получить

- [ресторан](./docs/traits/Restaurant.md)
- [период](./docs/traits/Periodical.md)
- [конфигурацию](./docs/traits/Configurable.md)
- [сопоставление (маппинг)](./docs/traits/Mapping.md)

Для этого классы могут использовать механизм [трейтов](https://www.php.net/manual/ru/language.oop5.traits.php)Каждое расширение подключается отдельно и используется тоже отдельно, прочитать подробнее можно по ссылкам сверху.

Далее механизм обмена, автоматически заполнит ваши сервисы маппингом, конфигурацией, рестораном, периодом, если они ему необходимы.

### Переводы

[](#переводы)

Пример
------

[](#пример)

Пример реализации доступен в проекте [песочницы](https://github.com/xeops/iikoExchangeApplication)

Запуск проекта
--------------

[](#запуск-проекта)

Для запуска проекта используйте [песочницу](https://github.com/xeops/iikoExchangeApplication)

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance32

Infrequent updates — may be unmaintained

Popularity23

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity32

Early-stage or recently created project

 Bus Factor1

Top contributor holds 85.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/76201bdc5e3cc7dd0b6c5c412f0c13841f781006e7011b99e82f68ebf7924fcb?d=identicon)[xeops](/maintainers/xeops)

---

Top Contributors

[![xeops](https://avatars.githubusercontent.com/u/9568398?v=4)](https://github.com/xeops "xeops (6 commits)")[![Seldaek](https://avatars.githubusercontent.com/u/183678?v=4)](https://github.com/Seldaek "Seldaek (1 commits)")

### Embed Badge

![Health badge](/badges/xeops-iiko-exchange/health.svg)

```
[![Health](https://phpackages.com/badges/xeops-iiko-exchange/health.svg)](https://phpackages.com/packages/xeops-iiko-exchange)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
