Смотрите также
Подробное описание подключения
Спецификация на платежные ссылки
Протокол уведомления о платежах
Пример автоматической организации платного доступа к закрытым разделам сайта
Подключения приема платежей в автоматическом режиме (через API)
Подключение приема платежей в автоматическом режиме необходимо для автоматического уведомления вашего магазина о завершении оплаты заказа клиентом.
Процесс подключения состоит из 3 шагов:
1. Настройка параметров вашего магазина в системе onpay
2. Настройка сайта
3. Тестирование
1. Настройка параметров вашего магазина в системе onpay
Войдите в личный кабинет в системе onpay http://secure.onpay.ru/user/login используя логин и пароль, полученный при регистрации.
Заполните поля:
- Уведомлять по API - если не включены уведомления, система onpay не будет отсылать магазину данные о платежах
- Метод отправки запросов в API - формат запросов, отправляемых скрипту "URL API"
- URL API - адрес вашего скрипта, который будет обрабатывать запросы от системы onpay
- Пароль для API IN - секретный ключ для вашего магазина (придумайте сами), который будет использоваться для проверки данных скриптом "URL API" и системой onpay
Пример настройки в кабинете для магазина demo:
URL http://secure.onpay.ru/user/login
логин demo1
пароль demodemo
Внимание! В демо-магазине технически возможно принимать деньги. Но вывести их нельзя. Просьба для коммерческой деятельности зарегистрироваться и использовать реальные учетные записи!
2. Настройка сайта
2.1. Скачайте файл onpay.rar на свой компьютер
Распакуйте архив
2.2. Откройте файл db.sql и выполните скрипт создания таблиц в mysql БД вашего сайта.
CREATE TABLE `operations` (
`id` int(11) NOT NULL auto_increment,
`sum` decimal default NULL,
`user_id` int(11) default NULL,
`status` int(11) default 0,
`type` varchar(64) default NULL,
`comment` varchar(255) default NULL,
`description` varchar(255) default NULL,
`date` datetime default NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
CREATE TABLE `balances` (
`id` int(11) NOT NULL,
`sum` decimal default NULL,
`date` datetime default NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
В БД будут созданы 2 таблицы:
operations - список платежей. Поле status - статус оплаты заявки (0 - не оплачена, 1 - оплачена)
balances - таблица балансов пользователей. Поле id - id пользователя в вашей системе
2.3. Откройте файл my_fuctions.php и укажите параметры доступа к БД вашего сайта. Необходимые параметры вы можете узнать у хостинга, на котором размещен ваш сайт.
function db_connect() {
// адрес сервера БД
$db_host = 'localhost:/tmp/mysql';
// учетная запись - логин
$db_user = 'mysql_user';
// учетная запись - пароль
$db_pass = 'mysql_password';
// имя БД
$db_name = 'my_shop_db';
$link = mysql_connect($db_host, $db_user, $db_pass);
if (!$link) {
die('Ошибка соединения с БД: ' . mysql_error());
} else {
mysql_select_db($db_name, $link);
}
return $link;
}
function db_disconnect($link) {
mysql_close($link);
}
2.4. Отредактируйте файл onpay_functions.php
function get_constant($name) {
$arr = array(
// логин в системе onpay
'onpay_login' => 'demo',
// секретный код вашего интернет ресурса.
// Этот код указывается в вашем кабинете в настройках
'private_code' => 'a2su3ig8y',
// URL куда следует вернуться после выполнения первого шага оплаты
'url_success' => 'http://www.domen.com',
// флаг - использовать таблицу балансов пользователей,
// если установлен false, то метод data_update_user_balance
// переопределять не надо, он не будет вызываться
'use_balance_table' => true,
// статус для неоплаченной операции в таблице operations
'new_operation_status' => 0
);
return $arr[$name];
}
Измените параметры:
- onpay_login - ваш логин в системе onpay
- private_code - "Пароль для API IN" из кабинета управления onpay
- url_success - URL, на который будет перенаправлен плательщик после выполнения первого шага оплаты
- use_balance_table - флаг использования таблицы балансов пользователей для стандартной схемы базы данных
Реализуйте получение ID текущего пользователя в функции data_create_operation
// функция создания операции.
// Для дальнейшей обработки платежа используется ID созданной операции
function data_create_operation($sum) {
//Определяем ID пользователя, осуществляющего пополнение
$userid = 1;
//определяем тип операции
$type = "Внешняя";
//вводим комментарий операции
$comment = "Пополнение счета";
//дополнительный комментарий
$description = "через систему Onpay";
//создаем строку для вставки в базу данных
$query = "INSERT INTO `operations` (`sum`,`user_id`, `status`,
`type`, `comment`, `description`, `date`)
VALUES('$sum', '$userid', ".get_constant('new_operation_status').", '$type',
'$comment', '$description', NOW());";
return mysql_query($query); //сохраняем данные в базу
}
Если вы решили не использовать существующую схему базы данных или вам не подходит предложенная, то отредактируйте функции: data_create_operation, data_get_created_operation, data_set_operation_processed, data_update_user_balance
// функция выборки неоплаченной операции по ID
function data_get_created_operation($id) {
$query = "SELECT * FROM operations WHERE `id`='$id'
and `status`=".get_constant('new_operation_status');
return mysql_query($query);
}
// функция обновления статуса операции на оплаченную
function data_set_operation_processed($id) {
$query = "UPDATE operations SET status=1 WHERE id='$id'";
return mysql_query($query);
}
// обновление баланса пользователя
// если параметр use_balance_table установлен в false, то этот метод не вызывается
// $operation_id - ID в таблице operations, по нему можно получить ID пользователя
function data_update_user_balance($operation_id, $sum) {
//Определяем ID пользователя, осуществляющего пополнение
$operation = data_get_created_operation($operation_id);
if (mysql_num_rows($operation) == 1) {
$operation_row = mysql_fetch_assoc($operation);
$userid = $operation_row["user_id"];
//Обновляем данные по счету пользователя
$query = "UPDATE balances SET sum=sum+$sum, date=NOW() WHERE id='$userid'";
return mysql_query($query);
} else {
return false;
}
}
Если вы хотите добавить дополнительные параметры к используемой платежной ссылке, измените функцию get_iframe_url_params
// функция определения параметров платежной формы
// к примеру, если необходимо добавить e-mail пользователя, который совершает платеж, то
// добавляется строка к результату '&user_email=vasia@mail.ru'
function get_iframe_url_params($operation_id, $sum, $md5check) {
return "pay_mode=fix&pay_for=$operation_id&price=$sum
¤cy=RUR&convert=yes&md5=$md5check
&url_success=".get_constant('url_success');
}
2.5. Скопируйте файлы onpay_functions.php, my_functions.php, form.html, request.php и api.php на сервер, где размещен ваш сайт.
Файл form.html отображает форму для ввода стоимости
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Форма создания заявки</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form method="post" action="request.php">
<table cellpadding="2" cellspacing="0" border="0">
<tr>
<td align="right">
Сумма:
</td>
<td>
<input type="text" name="sum" value="">
</td>
</tr>
<tr>
<td colspan="2" align="right">
<input type="submit" name="submit" value="Оставить заявку">
</td>
</tr>
</table>
</form>
</body>
</html>
Файл request.php отображает форму системы onpay
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Форма создания заявки</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?
include 'onpay_functions.php';
include 'my_functions.php';
$db_link = db_connect();
echo process_first_step();
db_disconnect($db_link);
?>
</body>
</html>
Файл api.php будет использоваться системой onpay для уведомления о поступивших платежах. Проверьте правильность заполнения параметра URL API в личном кабинете http://secure.onpay.ru/user/login
include 'onpay_functions.php';
include 'my_functions.php';
$db_link = db_connect();
echo process_api_request();
db_disconnect($db_link);
3. Тестирование
3.1 Откройте в браузере форму для ввода стоимости (путь к файлу form.html)

Введите стоимость, нажмите на кнопку "Отправить заявку"
3.2 На появившейся форме (request.php)

Выберите валюту платежа, введите свой e-mail, чекбокс соглашения, код проверки и нажмите "Продолжить"
3.3 Откройте личный кабинет и проверьте поступление заявки (Платежи -> Неоплаченные заявки)
3.4 Для тестирования уведомлений создайте тестовый платеж в личном кабинете (Настройки магазина -> Тестирование)

Проверьте результаты тестирования в личном кабинете (Настройки магазина -> Логи)

|