2. Проведение платежей в реальном времени
В предыдущей статье мы подробно разобрали процесс базовой настройки собственного провайдера.
Как вы помните, функционал собственного провайдера, в его базовой настройке, ограничивается вводом данных на платежном терминале и отправкой этих данных на сервер PayPRO. Для наших клиентов «базового» функционала рано или поздно становится недостаточно и появляется потребность в большем: проведении платежей в реальном времени, используя собственный сервер (биллинг), онлайн проверки введенных пользователем данных и прочее. Мы всегда стараемся прислушиваться к желаниям наших клиентов, поэтому, при возникновении потребности в дополнительном функционале – реализовываем в нашем программном обеспечении.
На данный момент в ПО PayPRO имеется следующий дополнительный функционал для собственных провайдеров:
- Проведение платежей в реальном времени путем отправки информации о платеже на сервер собственного провайдера;
- Онлайн проверку введенных пользователем данных;
- Опрос статусов платежей при работе с сервером собственного провайдера.
В данной статье мы рассмотрим, как при помощи дополнительного функционала превратить вашего «базового» собственного провайдера в мощный инструмент по приему платежей.
2.1. Настройка проведения платежей в реальном времени
Для того чтобы настроить для собственного провайдера проведение платежей в реальном времени с отправкой данных на ваш сервер (биллинг), необходимо внести соответствующие изменения в файл MyProviders.ini. Как и в предыдущей статье статье, мы составим файл-пример, а затем прокомментируем каждую из строк. За основу будет взят уже известный вам файл MyProviders.ini. С внесенными изменениями, он будет выглядеть следующим образом:
<Провайдер>
Номер провайдера=1
Наименование провайдера=PayPRO Интернет
Наименование организации-получателя средств=ООО "Собственный провайдер"
ИНН=1234567890
Комментарий=Введите номер договора (5-7 цифр)
Наименование поля ввода=Договор
Формат поля ввода=#######
Минимальная длина поля ввода=5
Логотип=paypro_internet.bmp
Тип=3
Метод отправки get
не url-кодировать
Адрес оплаты=http://111.222.333.444:5000/?command=pay
HTTP логин=login1
HTTP пароль=password1
<начало неотправленного пакета>
txn_id={TERMCHECK}
account={VALUE}
sum={SUMMA_}
<конец неотправленного пакета>
Прокомментируем только те строки, которые были добавлены в файл.
Метод отправки get
Для собственного провайдера доступно только два метода отправки данных на сервер – это GET и POST. По умолчанию отправка осуществляется методом POST, если этот метод является для вас приемлемым, то указывать метод отправки в MyProviders.ini не обязательно. Однако если ваш сервер работает только с данными отправленными методом GET, то добавление данной строки в файл для вас обязательно.
Адрес оплаты=http://111.222.333.444:5000/?command=pay
Обязательный параметр. Адрес вашего сервера (биллинга), на который будет отсылаться информация о платежах. При этом платеж станет успешным только в том случае, если на запрос, который ПО PayPRO отправит на сервер, будет получен любой не пустой ответ. В обратном случае, платеж будет оставаться в статусе «Неотправлен», пока терминалом не получит ответ от сервера.
HTTP логин=login01
Логин для HTTP-Basic авторизации на вашем сервере. Если для отправки данных на сервер не требуется авторизации, то данную строку добавлять в файл не обязательно.
HTTP пароль=password01
Пароль для HTTP-Basic авторизации на вашем сервере. Если для отправки данных на сервер не требуется авторизации, то данную строку добавлять в файл не обязательно.
<начало неотправленного пакета>
txn_id={TERMCHECK}
account={VALUE}
sum={SUMMA_}
<конец неотправленного пакета>
Обязательный параметр. Пакет с данными о платеже, который отправляется на ваш сервер (биллинг) сразу после совершения оплаты. Содержание пакета может варьироваться в зависимости от данных, которые вы хотите передать на ваш сервер. Представленный в нашем примере пакет, передает лишь номер чека, введенную клиентом информацию и сумму.
2.2. Настройка онлайн проверки
Часто нашим клиентам требуется, чтобы платежи не только проводились в реальном времени, но еще и проходили онлайн проверку на их сервере. Для того, чтобы реализовать данную функцию в вашем собственном провайдере, вам, в уже имеющийся MyProviders.ini, необходимо добавить ряд параметров, которые мы с комментариями рассмотрим ниже.
В рамках данной функции, есть возможность реализовать, как простое запрещение или разрешение оплаты в зависимости от результатов онлайн проверки, так и вывод данных полученных с сервера на экран и в чек.
Параметры MyProviders.ini необходимые для использования онлайн проверки:
Адрес предпроверки=http://111.222.333.444:5000/?command=check
Обязательный параметр. Адрес, на который будет отсылаться пакет с данными платежа для онлайн проверки. По умолчанию онлайн проверка производится после нажатия кнопки «Оплатить» и до внесения денежных средств.
Наименование серверной переменой=result
Обязательный параметр. Произвольное имя переменной, значение которой возвращается с сервера собственного провайдера, в результате онлайн проверки. Корректное наименование необходимо при дальнейшем использовании данного параметра в чеке или при выводе на экран.
Можно двумя способами настроить парсинг пакета онлайн проверки. Для обоих способов наличие предыдущих двух параметров (Адрес предпроверки и Наименование серверной переменой) обязательно.
1) С помощью встроенного в ПО парсера.
В MyProviders.ini добавляются:
<начало поиска первого символа серверной переменной>
<result>
<конец поиска первого символа серверной переменной>
Введенные в нем данные определяют позицию в полученном от сервера пакете, с которой необходимо начать поиск значения переменной, которая будет выводиться на экран и в чеке.
<начало поиска последнего символа серверной переменной>
</result>
<конец поиска последнего символа серверной переменной>
Введенные в нем данные определяют позицию, на которой необходимо закончить поиск значения переменной.
2) С помощью внешней функции парсера, написанной на языке lua
В MyProviders.ini добавляется:
парсер предпроверки lua=test.lua
Где test.lua файл с функцией парсера онлайн проверки(*.lua). Путь до файла указывается относительно MyProviders.ini.
Формат функции парсера: function parseOnline(data)
пример:
function GetNode(data, node)
openNode="<"..node..">"
closeNode="</"..node..">"
i1 = string.find (data, openNode) + string.len(openNode)
if i1==nil then
return nil
end
i2 = string.find (data, closeNode, i1)
if i2==nil then
return nil
end
value = string.sub(data, i1, i2-1)
return value
end
function parseOnline(data)
res = GetNode(data, "result")
fio = GetNode(data, "fio")
setServerVar(1, fio)
if res==nil then
return -2
end
if res=="0" then
return 1
end
return -1
end
Результатами функции должны быть:
-2: Ошибка соединения.
-1: Ошибка в данных
1: OK
В данном примере функция setServerVar(1, fio) записывает значение fio в параметр SERVER_VAR_VALUE1, для дальнейшего вывода {SERVER_VAR_VALUE1} в чек и на экран. Функция GetNode возвращает значение мужду <параметр> </параметр>.
Например в res записывается значение <result> </result> для дальнейшего анализа.
2.3. Настройка опроса статуса платежа
В начале данной статьи мы уже касались того, что платежи в пользу собственного провайдера, которые отправляются на сервер клиента, имеют всего два статуса: «Успешен» и «Неотправлен». Однако многим нашим клиентам этого может стать недостаточно и поэтому нами был разработан полноценный опрос статусов платежей для собственных провайдеров. Особенностью данной функции является то, что она реализована по средствам парсера, написанного на языке программирования Lua. Парсером, в данном случае, является файл с произвольным именем и расширением .lua. Если открыть этот файл с помощью Notepad++, то внутри он должен выглядеть следующим образом:
Выделенные элементы – обязательны, так как это основа парсера. Все остальные параметры могут варьироваться. В данном, задан следующий алгоритм изменения статуса:
- Если в ответ на запрос от сервера приходит номер сессии, то устанавливается статус «Действующий»;
- Если в ответ на запрос от сервера приходит «error», то устанавливается статус «Отклонен»;
- Если в ответ на запрос от сервера приходит «OK» , то устанавливается статус «Успешен»;
- Если на запрос от сервера приходит пустой ответ, то устанавливается статус «Неотправлен».
Для того чтобы данный парсер начал работать необходимо также внести ряд изменений в MyProviders.ini, в частности, добавить следующее:
Адрес проверки статуса= http://111.222.333.444:5000/?command=status
Обязательный параметр. Адрес, на который будет отсылаться пакет с данными платежа для проверки статуса.
Парсер lua=test.lua
Обязательный параметр. В данной строке указывается путь до файла парсера(*.lua) относительно MyProviders.ini.
<начало действующего пакета>
txn_id={TERMCHECK}
account={VALUE}
sum={SUMMA_}
<конец действующего пакета>
Обязательный параметр. Пакет с данными о платеже, которой отправляется на ваш сервер с целью опроса статуса. Содержание пакета может варьироваться в зависимости от данных необходимых для идентификации платежа на сервере собственного провайдера.
В данной статье мы рассмотрели все необходимые шаги и параметры для настройки дополнительного функционала у собственного. В заключении, предоставляем вам пример, как должен выглядеть MyProviders.ini со всем подключенным функционалом.
<Провайдер>
Номер провайдера=1
Наименование провайдера=PayPRO Интернет
Наименование организации-получателя средств=ООО "Собственный провайдер"
ИНН=1234567890
Комментарий=Введите номер договора (5-7 цифр)
Наименование поля ввода=Договор
Формат поля ввода=#######
Минимальная длина поля ввода=5
Логотип=paypro_internet.bmp
Тип=3
Метод отправки get
не url-кодировать
Адрес оплаты=http://111.222.333.444:5000/?command=pay
Адрес предпроверки=http://111.222.333.444:5000/?command=check
Адрес проверки статуса= http://111.222.333.444:5000/?command=status
Наименование серверной переменой=result
HTTP логин=login1
HTTP пароль=password1
Парсер lua=test.lua
<начало поиска первого символа серверной переменной>
<result>
<конец поиска первого символа серверной переменной>
<начало поиска последнего символа серверной переменной>
</result>
<конец поиска последнего символа серверной переменной>
<начало неотправленного пакета>
txn_id={TERMCHECK}
account={VALUE}
sum={SUMMA_}
<конец неотправленного пакета>
<начало действующего пакета>
txn_id={TERMCHECK}
account={VALUE}
sum={SUMMA_}
<конец действующего пакета>