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