2. Проведение платежей в реальном времени

В предыдущей статье мы подробно разобрали процесс базовой настройки собственного провайдера.

Если вы еще не ознакомились со статьями "Подготовительный этап и сбор информации" и "Базовая настройка приема платежей", то рекомендуем вам сделать это, прежде чем приступать к изучению данной статьи.

Как вы помните, функционал собственного провайдера, в его базовой настройке, ограничивается вводом данных на платежном терминале и отправкой этих данных на сервер PayPRO. Для наших клиентов «базового» функционала рано или поздно становится недостаточно и появляется потребность в большем: проведении платежей в реальном времени, используя собственный сервер (биллинг), онлайн проверки введенных пользователем данных и прочее. Мы всегда стараемся прислушиваться к желаниям наших клиентов, поэтому, при возникновении потребности в дополнительном функционале – реализовываем в нашем программном обеспечении.

На данный момент в ПО PayPRO имеется следующий дополнительный функционал для собственных провайдеров:

  • Проведение платежей в реальном времени путем отправки информации о платеже на сервер собственного провайдера;
  • Онлайн проверку введенных пользователем данных;
  • Опрос статусов платежей при работе с сервером собственного провайдера.

В данной статье мы рассмотрим, как при помощи дополнительного функционала превратить вашего «базового» собственного провайдера в мощный инструмент по приему платежей.

В рамках данной статьи мы рассмотри настройку дополнительного функционала собственного провайдера только на стороне нашего программного обеспечения. Для полной реализации этого функционала у вас должен быть корректно настроенный сервер (биллинг), без него все описанное в данной статье работать не будет.

Прежде чем перейти непосредственно к описанию элементов дополнительного функционала, мы рекомендуем ознакомиться со статьей "providers.ini и providers_user.ini - системные параметры провайдеров" и, в частности, с «Таблица 3. Характерные параметры собственных провайдеров». Данная информация вам будет полезна при реализации проведения платежей в реальном времени и онлайн проверки.

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> для дальнейшего анализа.

В случаи подстановки русских символов в функцию setServerVar, файл парсера для правильной работы необходимо сохранять в кодировке «UTF-8 без BOM»

2.3. Настройка опроса статуса платежа

В начале данной статьи мы уже касались того, что платежи в пользу собственного провайдера, которые отправляются на сервер клиента, имеют всего два статуса: «Успешен» и «Неотправлен». Однако многим нашим клиентам этого может стать недостаточно и поэтому нами был разработан полноценный опрос статусов платежей для собственных провайдеров. Особенностью данной функции является то, что она реализована по средствам парсера, написанного на языке программирования Lua. Парсером, в данном случае, является файл с произвольным именем и расширением .lua. Если открыть этот файл с помощью Notepad++, то внутри он должен выглядеть следующим образом:

Выделенные элементы – обязательны, так как это основа парсера. Все остальные параметры могут варьироваться. В данном, задан следующий алгоритм изменения статуса:

  • Если в ответ на запрос от сервера приходит номер сессии, то устанавливается статус «Действующий»;
  • Если в ответ на запрос от сервера приходит «error», то устанавливается статус «Отклонен»;
  • Если в ответ на запрос от сервера приходит «OK» , то устанавливается статус «Успешен»;
  • Если на запрос от сервера приходит пустой ответ, то устанавливается статус «Неотправлен».

Более подробно о языке программирования Lua вы можете узнать отсюда.

Для того чтобы данный парсер начал работать необходимо также внести ряд изменений в 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_}
<конец действующего пакета>