OpenPayz

Ой чтойта?

OpenPayz - внешнее API существующее для упрощения получения оплат от различных платежных систем. Предоставляет общие интерфейсы для регистрации и обработки поступивших от платежных систем уведомлений о совершенных пользователями платежах, а также для автоматизированного разноса полученных от платежных систем сумм по лицевым счетам пользователей Ubilling.

Чем принимаются оплаты?

На данный момент поддерживаются и бесплатно распространяются фронтенды/бекенды для:

Платежная система Что принимает? Фронтенд / бэкенд
EasyPay Терминалы
VISA
MasterCard
easypay
2click Терминалы 24nonstop
24NonStop Терминалы 24nonstop
МобиАЗС Терминалы 24nonstop
Приватбанк Приват24
Терминалы
privatx
LiqPay VISA
MasterCard
liqpay
iBox Терминалы ibox
Банк "Фамильный" Терминалы 2click
Терминалы CITY 24
Терминалы БНК 24
Терминалы ФК Система
Терминалы TYME
WebMoney
Ipay
Walletone W1
plategka.com
fbank
Банк "Тинькофф" Visa
MasterCard
МИР
tinkoff
COIN VISA
MasterCard
24nonstop
Mpay lifecell мобильные платежи lifecell easypay
fondy.eu Qiwi
Яндекс.Деньги
Webmoney
VISA
MasterCard
Приват24
fondy
Paymaster VISA
MasterCard
WebMoney
Приват 24
MoneXy
LiqPay
Wishround
paymaster
IPAY.UA VISA
MasterCard
ipay
Ipay MasterPass VISA
MasterCard
ipayx
IPAY.BY МТС (Беларусь)
Лайф (Беларусь)
Система «Расчет» (ЕРИП)
ipay_by
QIWI Терминалы qiwi
Новоплат Терминалы novoplat
Uniteller VISA
MasterCard
JCB
Diners Club
ChinaUnionPay
QIWI Кошелек
Яндекс.Деньги
WebMoney WMR
Евросеть
EasyPay
MoneyMail
Platezh.ru
RBK Money
WebCreds
PayPal
Деньги@Mail.ru
мобильные платежи:
-МТС
- Мегафон
- Билайн
uniteller
Comepay Терминалы comepay
City-Pay Терминалы citypay
CoPAYCo VISA
MasterCard
Укрэксимбанк
Кредитпромбанк
НСМЭП
WebMoney
copayco
Paylogic / ОСМП Терминалы osmp
Сбербанк России Наличные платежи sberbank
Portmone VISA
Visa Electron
MasterCard
Cirrus
Maestro
portmone
platezhka.com.ua (Банк Национальный Кредит) Терминалы platezhka

Как это?

Как-то так:

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

Обработчиками на данный момент могут являться:

  • Внесение денежных средств на счет пользователя Ubilling
  • Отсылка почтового уведомления

Транзакции регистрируются для конкретного «виртуального идентификатора» пользователя однозначно привязанного к «реальному идентификатору» (логину) пользователя stargazer. Каковым он будет и как это все будет работать - зависит полностью от вас. Для визуального контроля появления новых транзакций, существует одноименный модуль Ubilling.

Установка

Вкатываем дамп реестра транзакций:

transactions.sql
-- log transactions table
 
CREATE TABLE IF NOT EXISTS `op_transactions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `hash` varchar(255) NOT NULL,
  `date` datetime NOT NULL,
  `summ` int(11) NOT NULL,
  `customerid` varchar(255) NOT NULL,
  `paysys` varchar(255) NOT NULL,
  `processed` tinyint(1) NOT NULL,
  `note` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
-- контролируем уникальность хешей
ALTER TABLE `op_transactions` ADD UNIQUE ( `hash` );
-- если хотим работать с копейками
ALTER TABLE `op_transactions` CHANGE `summ` `summ` DOUBLE NOT NULL;

И вьюшку которая будет маппить логины реальных пользователей на их «Платежный идентификатор» используемый для работы уже с платежными системами. Например так:

Рекомендуемый вариант - так если душа жаждет концептуальности (спасибо Den1xxx):

op_customers_crc32.sql
-- transform users.login -> crc32(users.login);
CREATE VIEW op_customers (realid,virtualid) AS SELECT users.login, CRC32(users.login) FROM `users`;

Либо как-то так:

op_customers_aton.sql
-- transform users.login -> ip2int(users.IP);
CREATE VIEW op_customers (realid,virtualid) AS SELECT users.login, INET_ATON(users.IP) FROM `users`;

Либо так, если у вас полностью цифровые логины у пользователей:

op_customers_login.sql
-- transform users.login -> users.login;
CREATE VIEW op_customers (realid,virtualid) AS SELECT users.login, users.login FROM `users`;

Либо так, если вы уверены, что у всех ваших пользователей есть уникальные номера договоров:

op_customers_contract.sql
-- transform contracts.login -> contracts.contract;
CREATE VIEW op_customers (realid,virtualid) AS SELECT contracts.login, contracts.contract FROM `contracts`;

В общем все ограничено только вашей извращенной фантазией ;)
(стоит всюду повключать OPENPAYZ_REALID после этого, к слову «всюду» это в alter.ini и в userstats.ini)

Далее, от корня Ubilling прячем OpenPayz от кривых апдейтов греха подальше

# cd /usr/local/www/apache24/data/billing/
# cp -R ./openpayz ../
# cd ../openpayz/

После чего правим конфиг config/mysql.ini под наши реалии:

mysql.ini
;database host
server = "localhost"
;database port
port = "3306"
;user login
username = "mylogin"
;user password
password = "newpassword"
;database name to use
db = "stg"
;connection codepage 
character = "UTF8"
;tables prefix
prefix = "op_"

и конфиг config/openpayz.ini

openpayz.ini
; Вносить платежи напрямую в stargazer при помощи sgconf
STG_DIRECT=1
; Путь sgconf
SGCONF=/usr/sbin/sgconf
; Хост на котором установлен stargazer
STG_HOST=localhost
; Порт stargazer
STG_PORT=5555
; Логин администратора stargazer под которым будут внесены платежи
STG_LOGIN=admin
; Пароль администратора stargazer
STG_PASSWD=123456
;ID типа оплаты для Ubilling (Вообще хорошо добавить иной тип оплат для таких штук, например "Самообслуживание")
UB_CASHTYPE=1
 
; Отправлять уведомления о новых платежах почтой
SEND_MAIL=0
; Почта на которую должны отправляться уведомления
NOTIFY_MAIL=test@test.ru

Искренне надеюсь, что с этим все понятно. Далее нам следует знать, что в каталоге frontend в отдельных каталогах, лежат модули взаимодействующие с нашими платежными системами. Все общение с оными у нас происходит строго через них. Описывать все нету никакой возможности, так что возможно следует заглянуть внутрь и посмотреть нету ли там каких-то специфичных настроек внутри.
Внимание: при введении в продакшн, следует удалить все неиспользуемые каталоги фронтендов, а используемые переименовать во что-то более рандомное (например frontend/qiwi_87GS923FF) по вполне понятным причинам. Возможно стоит обеспокоиться о допуске к этим каталогам только конкретных IP платежных сервисов, с которыми они должны работать.

Пишем свой фронтенд

Далее, чтобы было понятно как это на самом деле работает мы можем например, написать наш собственный фронтенд для приема платежей от абстрактной «ГрабьКорован payment system» :)

Спецификация получения уведомления о успешной оплате пользователем от платежной системы "ГрабьКорован payment system"
При успешном пополнении счета вам будет выслан набор GET следующих объязательны параметров:
  user - идентификатор пользователя от которого получен платеж
  paymentid - уникальный идентификатор платежа
  cash - сума платежа
Если у вас все хорошо, вы должны ответить нам в формате "paymentid:код статуса"
Где "код статуса" это 
  0 - все хорошо, платеж получен и обработан
  1 - нету такого пользователя
  2 - Ктулху фхтагн!
Пример запроса на внесение средств с нашей стороны:
http://your_url/?user=123&paymentid=SDEFGSSDRHD324SDF&cash=100  
frontend/corovan/index.php
<?php
 
/*
* Фронтенд для получения оплат от платежной системы ГрабьКорован, в виде GET запроса
*/
 
// подключаем API OpenPayz
include ("../../libs/api.openpayz.php");
 
 
//проверяем получены ли все объязательные параметры
if ( (isset($_GET['user'])) AND (isset($_GET['paymentid'])) AND (isset($_GET['cash'])) ) {
 
       //получаем список всех virtualid
       $allcustomers= op_CustomersGetAll();
 
                $hash='COR'.$_GET['paymentid'];
                $summ=$_GET['cash'];
                $customerid=trim($_GET['user']);
                $paysys='COROVAN';
                $note='';
 
                //проверяем есть ли у нас такой пользователь
                if (isset($allcustomers[$customerid])) {
 
                //регистрируем новую транзакцию
                op_TransactionAdd($hash, $summ, $customerid, $paysys, $note);
                //вызываем обработчики необработанных транзакций
                op_ProcessHandlers();
 
                //отвечаем, что у нас все хорошо
                $goodReply=$_GET['paymentid'].':0';
                die($goodReply);
 
                } else {
                    //или что пользователь не нашелся
                    $badReply=$_GET['paymentid'].':1';
                    die($badReply);
                }
 
 
}
 
?>

Вот собственно и все, в случае успеха - op_TransactionAdd создает новую транзакцию а op_ProcessHandlers вызывает стандартные обработчики для всех пока что необработанных транзакций. Теперь Ubilling умеет грабить корованы :)

openpayz.txt · Последние изменения: 2017/12/09 17:39 — nightfly
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki