====Пример автоматической организации платного доступа к закрытым разделам сайта==== \\ **!!! версия под API 2.0 (последняя) доступна здесь:\\ https://onpaysolutions.ru/pages/onpay_class.html**\\ \\ Под закрытым разделом сайта подразумевается часть страницы, доступная только после ввода специального пароля. На ней можно размещать любую информацию, включая html и php скрипты, видео, секретные ссылки на файлы с паролем в своем названиии (например, book34dFs.zip).\\ \\ Для того, чтобы закрыть доступ к директории /dir/, достаточно разместить в ней индексный файл (index.php), тогда все переходы по адресу http://domen.ru/dir/ будут вызывать скрипт index.php. В котором размещается скрипт проверки пароля, не показывающий информаци до ввода пароля доступа.\\ \\ /dir/index.php \\ ====PHP-код скрипта, генерирующего секретный код и проверящего его оплату через систему Onpay==== \\
Ваш код доступа: =$code; //Выводим код ?> (сохраните его в надежном месте)
Доступ закрыт.
=$error; //Выводим ошибки?>
Получено: =$row['payed'];?> руб.
Цена продления: =$row['sum'];?> руб.
onpay_id: =$row['onpay_id'];?>
Секретная ссылка
Условия доступа:\\
\\
Если код доступа совпадает, текущий адрес странцы совпадает с указанным в базе данных, сумма платежа больше или равна минимальной и текущее время меньше или равно сроку годности, то доступ будет разрешен.\\
\\
Во всех остальных случаях - запрещен.\\
\\
====SQL-код====
\\
Для создания таблицы в базе данных:\\
create table payments
(
id int(11) unsigned auto_increment not null,
code bigint(16) unsigned,
path char(255),
sum float(7,2),
payed float(7,2),
onpay_id int(8) unsigned,
date int(8) unsigned,
ip char(255),
primary key (id)
);
Описание полей таблицы:\\
\\
**id** - уникальный номер строки, создается базой данных автоматически \\
**code** - секретный код доступа, составляется из уникального номера строки (id) и 7 последних цифр текущего времени в секундах \\
**path** - полный путь до страницы, к которой предоставляется доступ \\
**sum** - минимальная сумма платежа за доступ к странице \\
**payed** - сумма платежа (равна или больше sum) \\
**onpay_id** - номер платежа в системе Onpay.ru \\
**date** - срок годности кода (до какой даты), в секундах (Unix Time Format)\\
**ip** - IP-адрес пользователя, создавшего код платежа\\
\\
/api.php
\\
====URL API IN для оповещений от Onpay о пришедших платежах====
\\
";}
else {if (!is_numeric(intval($onpay_id))) {$error .="Параметр не является числом
";}}
if (empty($order_amount)) {$error .="Не указана сумма
";}
else {if (!is_numeric($order_amount)) {$error .="Параметр не является числом
";}}
if (empty($balance_amount)) {$error .="Не указана сумма
";}
else {if (!is_numeric(intval($balance_amount))) {$error .="Параметр не является числом
";}}
if (empty($balance_currency)) {$error .="Не указана валюта
";}
else {if (strlen($balance_currency)>4) {$error .="Параметр слишком длинный
";}}
if (empty($order_currency)) {$error .="Не указана валюта
";}
else {if (strlen($order_currency)>4) {$error .="Параметр слишком длинный
";}}
if (empty($exchange_rate)) {$error .="Не указана сумма
";}
else {if (!is_numeric($exchange_rate)) {$error .="Параметр не является числом
";}}
if (!$error) { //Если нет ошибок
if(is_numeric($code)) {//Если pay_for - число
$code=intval($code); //Код должен быть целым числом
$sum=floatval($order_amount);
$rezult=mysql_query("SELECT * FROM $db_tabl WHERE code='$code'"); //Проверяем, что код есть в базе данных, и оплачиваема сумма не меньше допустимой
if(mysql_num_rows($rezult) == 1) {
//Создаем строку хэша с присланных данных
$md5fb=strtoupper(md5($_REQUEST['type'].";".$pay_for.";".$onpay_id.";".$order_amount.";".$order_currency.";".$key.""));
//Сверяем строчки хеша (присланную и созданную нами)
if ($md5fb != $md5) {$rezult=answerpay($_REQUEST['type'],7,$pay_for,$order_amount,$order_currency,'Md5 signature is wrong',$onpay_id);}
else {
$time=time();
$rezult1=mysql_query("UPDATE $db_tabl SET date='".(time()+$period)."',payed=payed+'$sum',onpay_id='$onpay_id' WHERE code='$code';"); //Добавляем сумму оплаты и устанавливаем срок действия кода доступа
if ($rezult1) {$rezult=answerpay($_REQUEST['type'],0,$pay_for,$order_amount,$order_currency,'OK',$onpay_id);} //Если занесение информации в базу данных прошло без ошибок,
else {$rezult=answerpay($_REQUEST['type'],3,$pay_for,$order_amount,$order_currency,'Error in mechant database queries: operation or balance tables error',$onpay_id);}
}
} else {$rezult=answerpay($_REQUEST['type'],3,$pay_for,$order_amount,$order_currency,'Cannot find any pay rows acording to this parameters: wrong payment',$onpay_id);}
} else {//Если pay_for - не правильный формат
$rezult=answerpay($_REQUEST['type'],3,$pay_for,$order_amount,$order_currency,'Error in parameters data',$onpay_id);
}
} else {//Если есть ошибки
$rezult=answerpay($_REQUEST['type'],3,$pay_for,$order_amount,$order_currency,'Error in parameters data',$onpay_id);
}
}
echo $rezult;
//Функция выдает ответ для сервиса Onpay в формате XML на чек запрос
function answer($type,$code,$pay_for,$order_amount,$order_currency,$text) {
global $key;
$md5=strtoupper(md5("$type;$pay_for;$order_amount;$order_currency;$code;$key"));
return "\n$code
\n$code
\n