Monobank терминалы

Матеріал з NoDeny
Версія від 07:41, 6 липня 2025, створена Sv (обговорення | внесок) (Захистив «Monobank терминалы» ([Редагування=Дозволено тільки адміністраторам] (безстроково) [Перейменування=Дозволено тільки адміністраторам] (безстроково)))
Перейти до навігації Перейти до пошуку

Модуль monoterminal - предназначен для пополнения счета через терминалы Монобанка. Поддерживает расщепление платежей и/или распределение между мерчантами.

Настройки расщепления задаются в файле modules/monoterminal/monoterminal.pl в ключе rules:

rules => [
    правило 1,
    правило 2,
    ...
],

Если вам не нужно расщепление, у вас должно быть всего одно правило.

Правило - это блок {...} в котором находятся 3 параметра:

  • field_name (необязательное)
  • field_value (необязательное)
  • params (обязательное) - параметры ответа платежной системе


Когда модуль получает запрос от платежной системы, он проверяет правила сверху вниз, и если правило совпадает - модуль формирует ответ согласно этому правилу и прекращает их (правил) обработку. Правило указывает какие данные должны быть у абонента и если эти данные совпадают - считается, что правило сработало. Например, правило может звучать так: если у абонента поле «обслуживает ФОП» равно «Снеосиков», то ответить платежной системе, что выплаты должны идти на ФОП Снеосиков.

Правила задаются как perl-код - здесь он чем-то похож на json, тем не менее можно ошибиться в синтаксисе и он вообще не будет запускаться. Поэтому после изменения проверяем его так:

cd /usr/local/nodeny/ && perl -c modules/monoterminal/monoterminal.pl

От json правила отличаются тем, что:

  • вместо двоеточия используются символы =>
  • ключи можно не обрамлять кавычками
  • можно использовать одинарные кавычки

Пример правил:

rules => [
    {           
        field_name  => '_fop',
        field_value => ['sneosikov'],
        params  => [
            {
                percent  => 100,
                companyCode => '111111',
                serviceCode => '222222',
                name => 'Доступ до мережі Інтернет',
                companyInfo => {
                    edrpou   => '13456789',
                    name     => 'ТОВ СНЕОСІКОВ',
                    bankName => 'БАНК ПРЯМИЙ',
                    iban     => 'UA783052990000026001041606722',
                }
            },
        ]
    },
    {           
        params  => [
            {
                percent  => 100,
                companyCode => '333333',
                serviceCode => '444444',
                name => 'Доступ до мережі Інтернет',
                companyInfo => {
                    edrpou   => '7777777',
                    name     => 'ТОВ ДЕРЖАК',
                    bankName => 'БАНК НЕПРЯМИЙ',
                    iban     => 'UA783052990000026001111111111',
                }
            },
        ]
    },
],

В данном примере 2 правила:

  • для клиентов, у которых допполе «обслуживает ФОП» равно «Снеосиков»
  • для всех остальных клиентов

Детали для данного примера:

  • в вашем NoDeny должно существовать допполе «обслуживает ФОП» с именем _fop в базе данных
  • поле percent указывает на процент платежа, который пойдет на данный ФОП. В примере 100% - это означает, что полная сумма. Таким образом, это пример не использующий расщепление, а просто распределение платежей между ФОП-ами
  • во втором правиле не указаны условия (поля field_name и field_value), что означает «все другие абоненты»
  • поле field_value - должно ссылаться на массив значений (нужно помещать значения в квадратные скобки). Например, если field_value => ['sneosikov', 'volyk'], то правило сработает на клиентов ФОП-а Снеосиков и на клиентов ФОП-а Волик

Расщепление

Управляется параметром percent, который указывает на процент от суммы платежа. В каждом правиле есть параметр params, который описывает ответ платежной системе. Внутри этого параметра несколько блоков {...}, в котором указывается процент, а также параметры ФОП (или не ФОП). Если вам необходимо перераспределять финансы в соотношении 40% и 60%, то это будет выглядеть примерно так:

rules => [
    {           
        field_name  => '_fop',
        field_value => ['sneosikov'],
        params  => [
            {
                percent  => 40,
                companyCode => '111111',
                serviceCode => '222222',
                name => 'Доступ до мережі Інтернет',
                companyInfo => {
                    ...,
                }
            },
            {
                percent  => 60,
                companyCode => '888888',
                serviceCode => '999999',
                name => 'Послуга техпідтримки',
                companyInfo => {
                    ...,
                }
            },
        ]
    },
    ...
],