Перейти к основному контенту

Модуль EFT - автоматический процессинг

Описание

Механизм EFT списаний – это механизм для списания денежных средств с банковской карты клиента, согласно установленному графику списаний.
Списание производится через процессинг.
 
Поддерживаемые процессинги: ucscards.ru (UnitedCardServices)
 
В ПО Абонемент 
1) Создается клиент
2) Присваивается банковская карта с пометкой "основная"
3) Продается абонемент с типом "EFT", у которого имеется график платежей и график автоначислений услуг.
  
  Например
  Тип абонемента "EFT2" 
  списывать платеж на сумму "1000" ежемесячно каждого 11-го числа, 
  начислять услугу на сумму "1000" ежемесячно каждого 12-го числа 
 
Т.е. первая попытка списания 11-го, если списать деньги не удалось, то 12-го у клиента начислится ежемесячная услуга 
у клиента будет отрицательный баланс, как следствие по настройкам типа абонемента, клиенту будет доступ запрещен.
Обычно настраивают 10 попыток (дней) списаний.
 
Механизм состоит из 3-х последовательных звеньев: EventsService.exe, EFT.exe, Банк

image-1652966475103.png

 

[Звено 1]  EventsService.exe 
1) Формирует XML файл для  списания. 
Имеет набор данных: 
Карта плательщика, дата окончания, сумма списания и прочие доп. поля
2) Фиксирует ответ от банка в БД
 
[Звено 2]  EFT.exe
1) Преобразует файл XML в файл формата банка 
2) Формирует файл, закодированный ключом PGP. Сохраняет в отдельную папку.
3) Отправляет письмо по адресу с определенным текстом и прикрепленным файлом
4) Мониторит почту (может отличаться от отправляемой) для выявления ответа от банка 
и скачивает вложенный файл. Ожидается один файл. Сохраняет в отдельную папку.
5) Декодирует полученный файл и заполняет файл XML ответами из банка. 
 
[Звено 3]  Банк
1) Принимает закодированный файл для списания
2) Списывает с банковских карт средства
3) Возвращает закодированный файл с результатами списаний

Настройки EventsService.ini специализированные

[application]
    UseManualEft=0                         /* 0 - по умолчанию (автоматическое);  1 - ручное, пошаговое  EFT-списание */
 

[CreditCard]

  NeedRegCCPayment=1                /*1-включить автоматическую оплату абонементов. Всегда = 1*/
  useeft=1                                        /* включить механизм EFT списаний */
  PKCode = EFT,EFT2,EFT3           /* список кодов типов абонементов, учавствующие в атоматических списаниях */
 
  filename=ChangeEFT.xml              /* файл набора данных */ 
  paycode=Visa                                 /* код платежа создаваемого, в случае успешного списания*/  
 

Настройки EFT.ini

[Main]
ManualMode = 1                                                          /*Ручной режим формирования и импортирования пакетов (0 -- нет, 1 -- да)*/
Timer = 5000                                                                /*Время повтора Eft списания (в миллисекундах)*/
 
LockFile =D:\FITNESS\UTILS\EventService\ChangeEFT.lock                   /* Управляющий файл взаимодействия EventService и EFT*/
XMLFile = D:\_1_JOB\03_EFT\EventService\ChangeEFT.XML                 /* XML файл данных от Event Service*/
 
WorkDir = D:\FITNESS\UTILS\EFTWorkDir\                                                                  /* Рабочая директория */
FileToBankPack=D:\_1_JOB\03_EFT\WorkDir\09999_20170926_00.asc                     /* Техническое поле. Файл для банка Eft списания*/
FileFromBankPack =D:\_1_JOB\03_EFT\WorkDir\ans-09999_20170926_00.zip.asc   /* Техническое поле. Файл ответа от банка Eft списания*/
 
 
Pack = D:\FITNESS\UTILS\EFT\pack.bat                  /*Командный файл для упаковки (шифрования)*/
UnPack = D:\FITNESS\UTILS\EFT\unpack.bat         /*Командный файл для распаковки (дешифрования)*/
 
Status =0                                                            /* Состояние:*/
                                                                              ;0 -- начальное состояние (формирование файла для банка);
                                                                              ;1 -- отправление данных Eft в банк;
                                                                              ;2 -- получение ответа от банка по Eft;
                                                                              ;3 -- импортирование данных в Event Service
 
LastDate=43011                                                /*Дата последнего отправления в банк, в формате числа*/
IDDoc=3                                                             /* ;ID документа для банка (увеличивается на 1 после ответа от банка) */
 
FromDay = 1                                                      /*День месяца периода. Период, отправки данные в банк*/
Days = 30                                                           /*Кол-во дней от дня месяца периода . Период, отправки данные в банк*/           
FromTime = 10:00                                              /*Время, с которого отпралять данные в банк*/
 
[7Zip]
FileExe = "C:\Program Files\7-Zip\7z.exe"        /* путь до файла архивирования */
 
 
[GPG]
FileExe =  "C:\Program Files (x86)\GNU\GnuPG\gpg2.exe"   /*Приложение для шифрования и расшифровывания (PGP)*/
Password = *Password*                                                          /*Пароль для расшифровывания*/         
LocalUser = *User*                                                                  /*Имя пользователя ключа*/                     
 
[Bank]
  ContractNumber = 09999                               /*Номер договора. Получить у банка*/
  MerchantID = 9909999771                             /*Код клиента. Получить у банка*/     
 
[SMTP] 
  Host = smtp.yandex.ru                                   /*Адрес сервера SMTP*/
  Port = 465                                                       /*Порт сервера SMTP*/
 
  Username =Username@mail.ru                       /*Имя пользователя*/
  Password =*Password*                                    /*Пароль*/
  Subject = complex auth from %n%                   /*Темя сообщения*/
 
  FromAddress =Username@mail.ru                          /*Адрес отправителя*/
  ToAddress = monitor@abgcard.ru,admin@my.ru     /*Адрес банка*/   
  AdminAddress = admin@my.ru                                /*Адрес администратора*/
 
  TimeOut = 10000                                                     /*Тайм-аут подключения*/
  SSLType = 1                                                             /*Тип SSL (0 -- 3)*/
 
[POP3]
Host = pop.yandex.ru                                                  /*Адрес сервера POP3*/
Port = 995                                                                    /*Порт сервера POP3*/
Username =Username@mail.ru                                  /*Имя пользователя*/
Password =*Password*                                                /*Пароль*/
FromAddress =monitor@abgcard.ru                            /*Адрес отправителя (банка)*/
TimeOut = 10000                                                          /*Тайм-аут подключения*/
SSLType = 1                                                                  /*Тип SSL (0 -- 3)*/
 
ValidationFileName = 0                                                  /*Проверка имени файла от банка (0 -- нет, 1 -- да)*/  
 
[HTTP]
Host = 127.0.0.1             /*Хост. Для подтверждения отправки*/
Port = 8089                     /*Порт. Для подтверждения отправки*/
 

Взаимодействие 

Взаимодействие между EFT.exe и EventsService.exe – файловый.
Файл 1: EventsService\ChangeEFT.lock – управляющий файл
Файл 2: EventsService\ChangeEFT.XML– набор обрабатываемых данных
 
Файл ChangeEFT.lock имеет несколько значений
0 – Файл ChangeEFT.XML не сформирован
1 – Файл ChangeEFT.XML начал формироваться
2 – Файл ChangeEFT.XML сформирован
3 – Файл ChangeEFT.XML занят обработкой в EFT.exe
4 – Файл ChangeEFT.XML обработан EFT.exe
5 – Файл ChangeEFT.XML фиксируется в БД. По окончанию удаляется.
 

Общие данные поведения утилиты EFT.exe

1)  Цикл работы при стабильном функционировании: 
      1 раз в день , с 8 числа в течении 12 дней (параметры)
2) Признак начала работы: Состояние управляющего файла = 3
3) Признак окончания работы: Состояние управляющего файла = 4
 

Общий цикл EFT списания

1) Стартовое состояние: 
ChangeEFT.lock = 0 (либо отсутствует файл), ChangeEFT.XML пустой (либо отсутствует файл).
2) ChangeEFT.lock = 1, ChangeEFT.XML начинает формироваться XML.
3) ChangeEFT.lock = 2, ChangeEFT.XML завершилось формироваться XML.
4) EFT.exe выставляет значение ChangeEFT.lock = 3, копирует ChangeEFT.XML во временную директорию .\WORK. 
5) EFT.exe кодирует ключом PGP формирует зашифрованный файл для банка.
Сохраняет .\Archive\to\20170130_143548\09999_20170926_00.asc
6) EFT.exe отправляет сформированный файл на почту 
7) EFT.exe мониторит наличие ответа из банка раз в 5 минут (параметр)
8) EFT.exe скачивает ответ банка. 
Сохраняет во временную директорию.
Сохраняет .\Archive\from\20170130_153548\ans-09999_20170926_00.zip.asc
9) EFT.exe декодирует файл
Получает из файла банка ответы и к каждой записи ChangeEFT.XML  добавляет значения 
<ERRORCODE></ERRORCODE>
<ERRORTEXT></ ERRORTEXT >
10) EFT.exe копирует с заменой в директорию EventsService\ChangeEFT.XML 
cохраняет .\Archive\from\20170130_153552\ChangeEFT.XML 
11) EFT.exe выставляет значение ChangeEFT.lock = 4
12) EFT.exe фиксирует, что сегодня файл уже был один раз обработан и не работает не зависимо от того какое состояние файла ChangeEFT.lock. и ожидает следующий цикл обработки.
13) EventsService.exe выставляет значение ChangeEFT.lock = 5 
Обрабатывает файл ChangeEFT.XML .
14) EventsService.exe выставляет значение ChangeEFT.lock = 0 
Удаляет файл ChangeEFT.XML .
15) Цикл EFT списания завершен