====== ПриватБанк - Выписка (Р/С) ====== [[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 символов, начало и конец которого должно быть НЕ числом.