====== ПриватБанк - Выписка (Р/С) ======
[[billing:preferences:payment_system:payment_system|Вернуться на уровень выше]]
С версии 2.7.8 появилась возможность пополнять абонентов из выписки по расчётному счёту. К сожалению, это звучит только просто, т.к. настройки потребуют некоторых специальных знаний.
Для того, чтоб активировать эту услугу нужно со стороны ПриватБанка: вернуть авторизацию по логину и паролю, а также убрать подтверждение через СМС на телефон.
Настоятельно рекомендуем использовать отдельный Р/С для использования данного функционала. Т.е. не использовать для ПриватБанк Выписка и ПриватБанк V.2 один и тот же Р/С.
API https://link.privatbank.ua/console/wiki/p24_statements
С версией биллинга ниже 3.04.05 возможны проблемы в выгрузках! Обновите до актуальной
С версии 2.8.14 появилась возможность переопределить сумму платежа из описания платежа.
C версии 3.01.02 добавилась возможность выгружать выписки через автоклиент. Более подробно настройка автоклиента описана [[billing:preferences:payment_system:privat_vipiska_2|здесь
]]
===== Как это работает =====
При получении ответа от сервера ПриватБанка мы просматриваем все подходящие платежи по критериям ([[https://docs.google.com/document/d/1JjWgWYBorAh8HwnZUkWw_ANas2I_5zmocQqO2ia5EsA/pub|подробное описание критериев]]):
* состояние документа (info/@state): "r" - проведен
* вид платежа (info/@flinfo): "r" - реальный
* тип документа (info/@doctype): "m" - мемориальный ордер (или "p" - 'расходный ордер' и сумма больше нуля ())
* в поле "назначение платежа" удалось/не удалось обнаружить идентификатор пользователя с помощью указанного регулярного выражения
По идентификатору пользователя производится поиск абонента. Если он обнаружен, то его баланс увеличивается на указанную сумму. В противном случае, этот платёж заносится в базу и его можно найти в детальном отчёте "ПриватБанк - выписка" со статусом "Пользователь не найден":
\\ {{:billing:preferences:payment_system:pb_vipiska_not_found.png?nolink&|}}
===== Услуги =====
Услуга, для пополнения счета, может быть 3-х видов:
* пополнение по номеру UID абонента
* по логину абонента
* по № договора абонента
В данной платёжной системе реализована система алгоритмического поиска абонентов, с которой рекомендуем ознакомиться по ссылке ниже:
\\ [[mikbill:настройки:алгоритм_поиска_абонентов|]]
Поиск и оплата происходит для основных групп пользователей: обычный (базовый) и замороженный.
В зависимости от того в каком виде будет получен запрос, сервер MikBill автоматически его обработает, настроек не требует.
===== Настройка в биллинге =====
Системные опции:
\\ {{:billing:preferences:payment_system:privat_bank_p_acc_sys_opts.png?nolink&|}}
\\ Необходимо указать:
* Номер расчётного счёта **(в формате IBAN)**
* Пароль пользователя;
* Имя пользователя;
* REG EXP - регулярное выражение для поиска в поле "назначение платежа" идентификаторов пользователя ([[http://www.php.su/articles/?cat=regexp&page=008|о регулярных выражениях]], [[http://www.php.net/manual/ru/function.preg-match.php#105924|Regexp quick reference]]) - нужно указать только "сердцевину", как на скриншоте;
* Указать позицию идентификатора в результатах поиска (по умолчанию - 1);
* Количество дней - указать кол-во дней, за которые должны проверяться выписки раз в сутки.
* Аббревиатура валюты = UAH - если Вы используете гривны в биллинге как основную валюту.
По желанию/необходимости можно указать "Искл. наимен. плат" - исключаем платежи по наименованию плательщика. Если это поле пустое, то фильтр не применяется. В поле может быть указано не более одного 'наименования плательщика', которого надо исключить. Используется для недопускания дублирования платежей из 'ПриватБанк V.2', если на один Р/С подключены 2 системы.
После настройки в "системных опциях" всех необходимых параметров нужно настроить автоматический вызов двух консольных команд ([[billing:preferences:management:console?s[]=getPrivatTodayPayments&s[]=getPrivatPreviousPayments|Как это сделать?]]):
* getPrivatTodayPayments
* getPrivatPreviousPayments
Рекомендация использовать выгрузку за 3 суток.
Рекомендуемое время вызова "getPrivatPreviousPayments" - в начале следующих суток, а "getPrivatTodayPayments" - в зависимости от того, какого Вы хотите отклика от системы - задержку во времени между зачислением на Р/С и пополнением абонента в системе.
Если Вы фильтруете исходящий от сервера биллинга трафик, то разрешите доступ на: https://client-bank.privatbank.ua
===== Отчёты =====
Как обычно, все операции можно увидеть в "Отчёты -> терминалы -> детальные -> ПриватБанк Выписка":
\\ {{:billing:preferences:payment_system:privat_bank_p_acc_detail.png?nolink&|}}
Поле "всего" отражает количество средств, которое было зачислено абонентам.
Во все остальные финансовые отчёты это так же было добавлено.
====== Настройки для субпровайдера ======
[[billing:preferences:payment_system:sub_provider|Подробней тут]]
====== Подбор REG EXP выражения ======
Для подбора регулярного выражения можно воспользоватся [[https://www.phpliveregex.com|online сервисами]]\\
\\
Для разбора используется функция [[https://www.php.net/manual/ru/function.preg-match.ph|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** как раз и указывает, какое значение брать.\\
{{:billing:preferences:payment_system:screenshot_49.jpg?nolink|}}
\\
\\
Рассмотрим более детально, что мы вводили:\\
**\D([0-9]{5,7})\D** расшифровывается как:\\
\D - Любое не числовое значение\\
в скобочках () указываются фильтры для поиска\\
[0-9] указывается что ищем числовое значение\\
{5,7} длинной от 5 до 7 символов\\
В итоге выражение выглядит как:\\
Найти числовое значение длинной от 5 до 7 символов, начало и конец которого должно быть НЕ числом.