====Пример автоматической организации платного доступа к закрытым разделам сайта==== \\ **!!! версия под 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==== \\

Ваш код доступа: (сохраните его в надежном месте)

Оплатить код доступа:

=sum AND date>=".time().";"; //Проверка кода $result=mysql_query($sql); //Сохраняем код в базу данных if($result) { //Если сохранено в базу данных без ошибок if($row=mysql_fetch_assoc($result)) { //Если в базе данных найдена строка с введенным кодом для данной директории и он не просрочен, то сохраняем код $access=1; //Разрешаем доступ } else $error='Введен неправильный код доступа.'; } } // if($access == 0) { //Если доступ запрещен, то выводим форму для покупки или ввода оплаченного кода ?>

Доступ закрыт.

Доступ по коду разрешен до

Получено:  руб.

Цена продления:  руб.

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\n$code\n$pay_for\n$text\n$md5\n"; } //Функция выдает ответ для сервиса Onpay в формате XML на pay запрос function answerpay($type,$code,$pay_for,$order_amount,$order_currency,$text,$onpay_id) { global $key; $md5=strtoupper(md5("$type;$pay_for;$onpay_id;$pay_for;$order_amount;$order_currency;$code;$key")); return "\n\n$code\n $text\n$onpay_id\n $pay_for\n$pay_for\n$md5\n"; } ?>