![]() |
Биллинговая система NoDeny. Платежные терминалы ОСМП. |
Модуль платежных терминалов работает независимо от ядра биллинговой системы. Это скрипт, который располагается на сервере с админкой NoDeny и доступен на выполнение по https-запросу.
Вам необходимо создать папку вне админки NoDeny, например,
mkdir /usr/local/www/apache22/cgi-bin/osmp
и скопировать в нее скрипт osmp.pl, после чего выдать такие права:
chown www:wheel /usr/local/www/apache22/cgi-bin/osmp/osmp.pl
chmod 500 /usr/local/www/apache22/cgi-bin/osmp/osmp.pl
Перед тем как настроить веб-сервер на доступ к скрипту по паролю и только
от определенных ip-адресов (не забудьте обязательно это сделать!), оттестируем
его. Для этого в админке NoDeny создадим учетную запись тестового клиента, после чего
зайдем в его клиентскую статистику и на титульной странице выясним его т.н
«персональный платежный код». Если на титульной странице этого кода нет -
необходимо включить его отображение в «Операции» →
«Настройки» → «Клиентская статистика».chmod 500 /usr/local/www/apache22/cgi-bin/osmp/osmp.pl
Справка.
Персональный платежный код - это уникальный код клиента, который обладает небольшими средствами защиты. Дело в том, что клиенты нередко ошибаются и вместо идентификатора вводят сумму пополнения либо номер договора, либо просто ошибаются при вводе. Автор системы решил реализовать защиту аналогично как она реализована в банковских счетах. Идентификатор защищается контрольной суммой так, что при ошибке ввода, с довольно большой вероятностью идентификатор становится недействительным.
В системе NoDeny идентификатор формируется таким образом: берется id клиента по биллингу, все цифры этого id складываются, после чего последняя цифра от полученной суммы приписывается к первоначальному id. (Технически эта операция называется «сложение по модулю 10»)
Например. У клиента id=5907. Складываем все цифры его идентификатора: 5 + 9 + 0 + 7 = 21. Берем последнюю цифру полученной суммы: 1, приписываем к id и получаем персональный платежный код клиента: 59071.
Если при вводе клиент ошибется в одной из цифр, например, введет 58071, то при проверке 5 + 8 + 0 + 7 = 20, 0 не равен 1, поэтому клиенту будет сообщено об ошибке. Так же, если клиент ошибется и вместо номера платежного кода попытается ввести сумму пополнения, то она с большой вероятностью не попадет под описанный шаблон, например, 100, 50, 25, 120 и т.д. сформируют ошибку. А 550 грн - нет. Тем не менее, данный алгоритм позволяет отсеять подавляющее большинство ошибок.
Если возникнет необходимость выяснить идентификатор клиента по платежному коду, то это не составит труда - достаточно отбросить последнюю цифру, так если ППК = 1236, то id клиента = 123.
Персональный платежный код - это уникальный код клиента, который обладает небольшими средствами защиты. Дело в том, что клиенты нередко ошибаются и вместо идентификатора вводят сумму пополнения либо номер договора, либо просто ошибаются при вводе. Автор системы решил реализовать защиту аналогично как она реализована в банковских счетах. Идентификатор защищается контрольной суммой так, что при ошибке ввода, с довольно большой вероятностью идентификатор становится недействительным.
В системе NoDeny идентификатор формируется таким образом: берется id клиента по биллингу, все цифры этого id складываются, после чего последняя цифра от полученной суммы приписывается к первоначальному id. (Технически эта операция называется «сложение по модулю 10»)
Например. У клиента id=5907. Складываем все цифры его идентификатора: 5 + 9 + 0 + 7 = 21. Берем последнюю цифру полученной суммы: 1, приписываем к id и получаем персональный платежный код клиента: 59071.
Если при вводе клиент ошибется в одной из цифр, например, введет 58071, то при проверке 5 + 8 + 0 + 7 = 20, 0 не равен 1, поэтому клиенту будет сообщено об ошибке. Так же, если клиент ошибется и вместо номера платежного кода попытается ввести сумму пополнения, то она с большой вероятностью не попадет под описанный шаблон, например, 100, 50, 25, 120 и т.д. сформируют ошибку. А 550 грн - нет. Тем не менее, данный алгоритм позволяет отсеять подавляющее большинство ошибок.
Если возникнет необходимость выяснить идентификатор клиента по платежному коду, то это не составит труда - достаточно отбросить последнюю цифру, так если ППК = 1236, то id клиента = 123.
Введем в браузере: http://10.0.0.1/cgi-bin/osmp/osmp.pl
В результате в нем должен отобразиться подобный текст:
<?xml version="1.0" encoding="UTF-8"?> <response><osmp_txn_id></osmp_txn_id> <result>1</result> <comment>nod3</comment> </response>
Если же coment возвращается равным nod1 или nod2 - это указывает на некорректную настройку скрипта osmp.pl. Вам необходимо отредактировать в его начале строку, начинающуюся с «$Main_config=».
Теперь смоделируем выполнение транзакции пополнения счета. Введем в браузере:
http://10.0.0.1/cgi-bin/osmp/osmp.pl?command=pay&sql=1&txn_id=666&txn_date=now&sum=10.25&account=33
В этом url необходимо изменить лишь персональный платежный код, необходимо взять ППК тестового клиента, который мы создали ранее. В примере ППК = 33 (account=33).
Комментарий. В url-e параметр txn_date установлен в значение now - этим мы указываем проводить
платеж-пополнение именно в момент совершения транзакции. Внимание! В механизме ОСМП время платежа
соответствует времени оплаты в платежном терминале, а не времени проведения транзакции. В этом случае
в txn_date должно быть закодировано время, это описано в документации к ОСМП. Значение now
реализовано автором NoDeny только для упрощения тестирования скрипта, в реальности время
платежа будет установлено по времени, указанному терминалом.
Также в скрипте предусмотрен страховочный механизм, если разница с текущим временем и временем, которым терминал указывает провести платеж, составляет больше суток, то терминалу будет возвращен код nod12 и транзакция отклонена. Это защита от ошибочного проведения платежей задними числами. Дело в том, что ни одна программа не застрахована от ошибок, они есть (по крайней мере были) в терминалах ОСМП, например, игнорирование проверки соответствия аккаунта шаблону.
Также в скрипте предусмотрен страховочный механизм, если разница с текущим временем и временем, которым терминал указывает провести платеж, составляет больше суток, то терминалу будет возвращен код nod12 и транзакция отклонена. Это защита от ошибочного проведения платежей задними числами. Дело в том, что ни одна программа не застрахована от ошибок, они есть (по крайней мере были) в терминалах ОСМП, например, игнорирование проверки соответствия аккаунта шаблону.
txn_id=666 - это идентификатор платежа в системе ОСМП. Для каждого, состоявшегося в системе ОСМП платежа, он должен быть уникальным. Поэтому не забывайте его менять при тестировании.
При успешности транзакции скрипт должен вернуть в браузер поле result = 0. В противном случае поля result и coment вы можете расшифровать просмотрев содержимое файла osmp.pl. Например, если вы получили comment=nod13 - это означает "не удалось провести платеж в БД", т.е проблема с нашей стороны.
Чтобы диагностировать проблему с нашей стороны, мы вставили в url: sql=1 - это указывает sql запросы записывать в лог-админки. ОСМП не использует этот параметр, он введен автором NoDeny для тестирования.
После тестирования не забудьте отредактировать конфиг веб-сервера так, чтобы он давал доступ к папке osmp только по паролю (см. как это сделано для админки), а также разрешал доступ только с ip-адресов терминалов, которые должны быть указаны в договоре с ОСМП.