Monobank терминалы: відмінності між версіями

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку
м (Захистив «Monobank терминалы» ([Редагування=Дозволено тільки адміністраторам] (безстроково) [Перейменування=Дозволено тільки адміністраторам] (безстроково)))
 
(Не показані 4 проміжні версії цього користувача)
Рядок 11: Рядок 11:
</pre>
</pre>


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


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




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


Правила задаются как perl-код - здесь он чем-то похож на json, тем не менее можно ошибиться в синтаксисе и он вообще не будет запускаться. Поэтому после изменения проверяем его так:
Правила задаются как perl-код - здесь он чем-то похож на json, тем не менее можно ошибиться в синтаксисе и он вообще не будет запускаться. Поэтому после изменения проверяем его так:
Рядок 117: Рядок 117:
],
],
</pre>
</pre>
field_name может указывать на допполе или номер (id) группы, в которой находится абонент (field_name  => 'grp')

Поточна версія на 07:48, 6 липня 2025

Модуль 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 => {
                    ...,
                }
            },
        ]
    },
    ...
],


field_name может указывать на допполе или номер (id) группы, в которой находится абонент (field_name => 'grp')