ПриватБанк - Выписка (Р/С)
С версии 2.7.8 появилась возможность пополнять абонентов из выписки по расчётному счёту. К сожалению, это звучит только просто, т.к. настройки потребуют некоторых специальных знаний.
С версии 2.8.14 появилась возможность переопределить сумму платежа из описания платежа.
C версии 3.01.02 добавилась возможность выгружать выписки через автоклиент. Более подробно настройка автоклиента описана здесь
Как это работает
При получении ответа от сервера ПриватБанка мы просматриваем все подходящие платежи по критериям (подробное описание критериев):
- состояние документа (info/@state): "r" - проведен
- вид платежа (info/@flinfo): "r" - реальный
- тип документа (info/@doctype): "m" - мемориальный ордер (или "p" - 'расходный ордер' и сумма больше нуля (<amount amt="больше нуля">))
- в поле "назначение платежа" удалось/не удалось обнаружить идентификатор пользователя с помощью указанного регулярного выражения
По идентификатору пользователя производится поиск абонента. Если он обнаружен, то его баланс увеличивается на указанную сумму. В противном случае, этот платёж заносится в базу и его можно найти в детальном отчёте "ПриватБанк - выписка" со статусом "Пользователь не найден":
Услуги
Услуга, для пополнения счета, может быть 3-х видов:
- пополнение по номеру UID абонента
- по логину абонента
- по № договора абонента
В данной платёжной системе реализована система алгоритмического поиска абонентов, с которой рекомендуем ознакомиться по ссылке ниже:
Алгоритм поиска абонентов при пополнении
Поиск и оплата происходит для основных групп пользователей: обычный (базовый) и замороженный.
В зависимости от того в каком виде будет получен запрос, сервер MikBill автоматически его обработает, настроек не требует.
Настройка в биллинге
Системные опции:
Необходимо указать:
- Номер расчётного счёта (в формате IBAN)
- Пароль пользователя;
- Имя пользователя;
- REG EXP - регулярное выражение для поиска в поле "назначение платежа" идентификаторов пользователя (о регулярных выражениях, Regexp quick reference) - нужно указать только "сердцевину", как на скриншоте;
- Указать позицию идентификатора в результатах поиска (по умолчанию - 1);
- Количество дней - указать кол-во дней, за которые должны проверяться выписки раз в сутки.
- Аббревиатура валюты = UAH - если Вы используете гривны в биллинге как основную валюту.
По желанию/необходимости можно указать "Искл. наимен. плат" - исключаем платежи по наименованию плательщика. Если это поле пустое, то фильтр не применяется. В поле может быть указано не более одного 'наименования плательщика', которого надо исключить. Используется для недопускания дублирования платежей из 'ПриватБанк V.2', если на один Р/С подключены 2 системы.
После настройки в "системных опциях" всех необходимых параметров нужно настроить автоматический вызов двух консольных команд (Как это сделать?):
- getPrivatTodayPayments
- getPrivatPreviousPayments
Рекомендуемое время вызова "getPrivatPreviousPayments" - в начале следующих суток, а "getPrivatTodayPayments" - в зависимости от того, какого Вы хотите отклика от системы - задержку во времени между зачислением на Р/С и пополнением абонента в системе.
Отчёты
Как обычно, все операции можно увидеть в "Отчёты → терминалы → детальные → ПриватБанк Выписка":
Поле "всего" отражает количество средств, которое было зачислено абонентам.
Во все остальные финансовые отчёты это так же было добавлено.
Настройки для субпровайдера
Подбор REG EXP выражения
Для подбора регулярного выражения можно воспользоватся online сервисами
Для разбора используется функция preg_match.
В Regex вводим: \D([0-9]{5,7})\D
В search string вводим наш текст: Услуги интернет, абонент R1234567, Василий Пупкин, 2019-07-15 15:00:00
В результате будет найдено 2 значения:
array( 0 => R1234567, 1 => 1234567 )
В 0 возвращается полностью всё значение, в 1 только то что попало под условия фильтра.
В настройках Позиция в REG EXP как раз и указывает, какое значение брать.
Рассмотрим более детально, что мы вводили:
\D([0-9]{5,7})\D расшифровывается как:
\D - Любое не числовое значение
в скобочках () указываются фильтры для поиска
[0-9] указывается что ищем числовое значение
{5,7} длинной от 5 до 7 символов
В итоге выражение выглядит как:
Найти числовое значение длинной от 5 до 7 символов, начало и конец которого должно быть НЕ числом.