Skip to end of metadata
Go to start of metadata

Описание создания модуля AbillsBank.pm

Нужно создать файл AbillsBank.pm в папке /usr/abills/Abills/modules/Paysys/

Заголовки модуля

Шапка модуля
package Paysys::systems::AbillsBank;
=head1 AbillsBank
  New module for AbillsBank

  Documentaion: abills.net.ua

  Date: 2022.01.01

  Version: 8.00
=cut


use strict;
use warnings FATAL => 'all';

require Paysys::Paysys_Base;

our $PAYSYSTEM_NAME = 'AbillsBank';
our $PAYSYSTEM_SHORT_NAME = 'AB';
our $PAYSYSTEM_ID = 1;
our $PAYSYSTEM_VERSION = '8.00';

# Этот хеш используется для настройки системы в меню настроек
our %PAYSYSTEM_CONF = (
  PAYSYS_ABILLS_BANK_LOGIN => '',
);


Обязательные функции модуля



Конструктор модуля. 

sub new()
#**********************************************************
=head2 new($db, $admin, $CONF)

  Arguments:
    $db    - ссылка на обьект базы данных    (required)
    $admin - ссылка на обьект администратора (required)
    $CONF  - ссылка на хеш %conf             (required)
    $attr  - {
		в атрибутах передаем дополнительные параметры
    }

  Returns:
    $self - обьект класса платежной системы

=cut
#**********************************************************
sub new {
  my $class = shift;

  my ($db, $admin, $CONF, $attr) = @_;

  my $self = {
    db    => $db,
    admin => $admin,
    conf  => $CONF,
    DEBUG => $CONF->{PAYSYS_DEBUG} || 0,
  };


  bless($self, $class);

  return $self;
}

sub get_settings
#**********************************************************
=head2 get_settings() - return hash of settings

  Arguments:


  Returns:
    HASH
=cut
#**********************************************************
sub get_settings {
  my %SETTINGS = ();

  $SETTINGS{VERSION} = $PAYSYSTEM_VERSION; # объявляется в шапке модуля
  $SETTINGS{ID}      = $PAYSYSTEM_ID;      # объявляется в шапке модуля
  $SETTINGS{NAME}    = $PAYSYSTEM_NAME;    # объявляется в шапке модуля

  # хеш с нужными ключами настсройки системы, например: логин, пароль, поле идентификации абонента и тд.
  $SETTINGS{CONF} = \%PAYSYSTEM_CONF;

  return %SETTINGS;
}

Функция proccess() запускается при запросе от платежной системы на скрипт paysys_check.cgi.

Когда приходит запрос, система проверяет наличие IP адреса с которого идет запрос( $ENV{REMOTE_ADDR} ) в списке адресов которые вы прописали при настройках модуля.

sub proccess()
#**********************************************************
=head2 proccess(\%FORM) - function that proccessing payment
                          on paysys_check.cgi

  Arguments:
    $FORM - HASH REF to %FORM

  Returns:

=cut
#**********************************************************
sub proccess {
  my $self = shift;
  my ($FORM) = @_;

  
}

Функция user_portal() должна быть для оплаты из клиентского кабинета.

Функция запускается после введения суммы и нажатия Дальше.


sub user_portal()
#**********************************************************
=head2 user_portal () - 

  Arguments:

  Returns:

=cut
#**********************************************************
sub user_portal {
  my $self = shift;
  my ($user, $attr) = @_;

  
}

Создание функции тестирования

Пример взят из модуля Ibox
#**********************************************************
=head2 has_test()

  Arguments:
     -

  Returns:

=cut
#**********************************************************
sub has_test {
  my $self = shift;
my %params_hash = (
    '1CHECK'  => {
      account => {
        name    => 'account',
        val     => '',
        tooltip => "Идентификатор абонента в зависимости от настроек системы.(По умолчанию вводить UID абонента)",
      },
      command => {
        name      => 'command',
        val       => 'check',
        ex_params => 'readonly="readonly"',
      },
      sum     => {
        name    => 'sum',
        val     => '1.00',
        tooltip => 'Сумма платежа',
        type    => 'number',
      },
      txn_id  => {
        name    => 'txn_id',
        val     => $random,
        tooltip => 'Transaction ID(случайный номер)',
        type    => 'number',
      },
      result  => [ '<result>0</result>' ],
    },
    '2PAY'    => {
      result  => [ '<result>0</result>' ],
      command => {
        name      => 'command',
        val       => 'pay',
        ex_params => 'readonly="readonly"',
      },
      account => {
        name    => 'account',
        val     => '',
        tooltip => "Идентификатор абонента в зависимости от настроек системы.(По умолчанию вводить UID абонента)",
      },
      sum     => {
        name    => 'sum',
        val     => '1.00',
        tooltip => 'Сумма платежа',
        type    => 'number',
      },
      txn_id  => {
        name    => 'txn_id',
        val     => $random,
        tooltip => 'Transaction ID(случайный номер)',
        type    => 'number',
      },
    },
    '3CANCEL' => {
      result  => [ '<result>0</result>' ],
      command => {
        name      => 'command',
        val       => 'cancel',
        ex_params => 'readonly="readonly"',
      },
      prv_txn => {
        name    => 'prv_txn',
        val     => 'Скопировать из ответа на проведение платежа',
        tooltip => 'Id платежа',
        type    => 'number',
      },
    },
  );

  return \%params_hash;
  
}

Описание функции и структуры данных

Тест платежной системы обращается в данную функцию для получения параметров по каким проводить тест.

%params_hash должен иметь следующую структуру.

ПараметрОписаниеПример
1CHECK, 2PAY, 3CANCEL

Параметры обозначают функции которые будут тестироваться. Если в вашем модуле нет какой то из них, то параметра не нужно.

Цифра в названии обозначает порядок функции тестирования, после нее может быть любое название.

Пример взят из модуля Ibox
my %params_hash = (
    '1CHECK'  => { },
    '2PAY'    => { },
    '3CANCEL' => { },
  );
Пример взят из модуля Ibox
 param1 => {
        name    => 'account',
        val     => '',
        tooltip => "",
        ex_params => 'readonly="readonly"',
        type    => 'number',
      },
...
 param...n => {
        name    => 'account',
        val     => '',
        tooltip => "",
        ex_params => 'readonly="readonly"',
        type    => 'number',
      },
result  => [ 'result for exprassion' ],

Данные параметры заполняются для создания формы тестирования по каждой функции.

  • param - название параметра
  • Все названия следующих параметров не изменять 
  • name - название параметра, которое будет передаваться в запросе
  • val - в этом параметре можно занести значение для заполнения input-а по умолчанию
  • tooltip - подсказка для input-а
  • type - тип для input-а (text,number)
  • ex_params - можно передавать дополнительные параметры input-а (Например: readonly="readonly" - для запрета на изменение значения)

После добавления необходимых параметров ОБЯЗАТЕЛЬНО добавить параметр

result - массив результатов, можно передавать несколько(название не изменять)

Отдельный элемент массива будет подставляться в регулярное выражение и осуществляться его поиск в xml-ответе функции.

Пример взят из модуля Ibox
'1CHECK'  => {
      account => {
        name    => 'account',
        val     => '',
        tooltip => "Идентификатор абонента в зависимости от настроек системы.(По умолчанию вводить UID абонента)",
      },
      command => {
        name      => 'command',
        val       => 'check',
        ex_params => 'readonly="readonly"',
      },
      sum     => {
        name    => 'sum',
        val     => '1.00',
        tooltip => 'Сумма платежа',
        type    => 'number',
      },
      txn_id  => {
        name    => 'txn_id',
        val     => $random,
        tooltip => 'Transaction ID(случайный номер)',
        type    => 'number',
      },
      result  => [ '<result>0</result>' ],
    },
  • No labels