Вход Регистрация
Файл: vkolhoze.com/pay_rubi/onpay_functions.php
Строк: 262
<?
/*======================= Необходимо прописать свои параметры =========================*/
function get_constant($name) {
    
$arr = array(
           
// логин в системе onpay
             
'onpay_login' => 'vferme'
             
// секретный код вашего интернет ресурса. Этот код указывается в вашем кабинете в настройках
             
'private_code' => 'jjGQRt3X0yM'
             
// URL куда следует вернуться после выполнения первого шага оплаты
             
'url_success' => 'http://vferme.com',
             
// флаг - использовать таблицу балансов пользователей, если установлен false, то метод 
             // data_update_user_balance переопределять не надо, он не будет вызываться
             
'use_balance_table' => false,
             
// статус для неоплаченной операции в таблице operations
             
'new_operation_status' => 0
            
);
    return 
$arr[$name];
}

// Для работы системы необходимо сохранение заявок от пользователей на первом шаге и обработка
// при уведомлении системой onpay

// функция определения параметров платежной формы
// к примеру, если необходимо добавить 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&currency=RUR&convert=yes&md5=$md5check&url_success=".get_constant('url_success');
}

// функция создания операции. Для дальнейшей обработки платежа используется ID созданной операции
function data_create_operation($sum) {
  
$userid             1;                                             //Определяем ID пользователя, осуществляющего пополнение 
  
$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); //сохраняем данные в базу 
}

// функция выборки неоплаченной операции по 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;
    }
}
/*==================================== Конец ==========================================*/

//функция проебразует число в число с плавающей точкой 
function to_float($sum) { 
  if (
strpos($sum".")) {
        
$sum round($sum2);
    } else {
        
$sum $sum.".0";
    } 
  return 
$sum
}

//функция выдает ответ для сервиса onpay в формате XML на чек запрос 
function answer($type$code$pay_for$order_amount$order_currency$text) { 
  
$md5 strtoupper(md5("$type;$pay_for;$order_amount;$order_currency;$code;".get_constant('private_code'))); 
  return 
"<?xml version="1.0" encoding="UTF-8"?>n<result>n<code>$code</code>n<pay_for>$pay_for</pay_for>n<comment>$text</comment>n<md5>$md5</md5>n</result>";


//функция выдает ответ для сервиса onpay в формате XML на pay запрос 
function answerpay($type$code$pay_for$order_amount$order_currency$text$onpay_id) { 
  
$md5 strtoupper(md5("$type;$pay_for;$onpay_id;$pay_for;$order_amount;$order_currency;$code;".get_constant('private_code'))); 
  return 
"<?xml version="1.0" encoding="UTF-8"?>n<result>n<code>$code</code>n<comment>$text</comment>n<onpay_id>$onpay_id</onpay_id>n<pay_for>$pay_for</pay_for>n<order_id>$pay_for</order_id>n<md5>$md5</md5>n</result>"
}

function 
process_first_step() {
    
$sum $_REQUEST['sum'];
    
$output '';
    
$err '';
    
    if (
is_numeric($sum)) { //проверяем являются ли введенные данные числом 
            
$result data_create_operation($sum);
    } else {
    
$err 'В поле сумма не числовое значение';
    }
    
//если данные в базу поместились, идем дальше. 
    
if ($result) { 
        
$number mysql_insert_id(); //определяем id записи в бд 
        
$sumformd5 to_float($sum); //преобразуем число к числу с плавающей точкой 
            //создаем хеш данных для проверки безопасности
        
$md5check md5("fix;$sumformd5;RUR;$number;yes;".get_constant('private_code')); 
            
//создаем строчку для запроса
        
$url "http://secure.onpay.ru/pay/".get_constant('onpay_login')."?".get_iframe_url_params($number$sum$md5check);
            
//вывод формы onpay с заданными параметрами
            
$output '<iframe src="'.$url.'" width="300" height="500" frameborder=no scrolling=no></iframe> 
                             <form method=post action="'
.$_SERVER['HTTP_REFERER'].'"><input type="submit" value="Вернуться"></form>';
    } else {
      
$err = empty($err) ? mysql_error() : $err;
        
$output "onpay script: Ошибка сохранения данных. (" $err ")";
    }
    return 
$output;
}

function 
process_api_request() {
    
$rezult ''
    
$error ''
    
//проверяем чек запрос 
    
if ($_REQUEST['type'] == 'check') { 
        
//получаем данные, что нам прислал чек запрос 
        
$order_amount     $_REQUEST['order_amount']; 
        
$order_currency $_REQUEST['order_currency']; 
        
$pay_for                 $_REQUEST['pay_for']; 
        
$md5                         $_REQUEST['md5']; 
        
//выдаем ответ OK на чек запрос 
        
$rezult answer($_REQUEST['type'],0$pay_for$order_amount$order_currency'OK'); 
    } 

    
//проверяем запрос на пополнение 
    
if ($_REQUEST['type'] == 'pay') { 
        
$onpay_id                     $_REQUEST['onpay_id']; 
        
$pay_for                         $_REQUEST['pay_for']; 
        
$order_amount             $_REQUEST['order_amount']; 
        
$order_currency            $_REQUEST['order_currency']; 
        
$balance_amount         $_REQUEST['balance_amount']; 
        
$balance_currency     $_REQUEST['balance_currency']; 
        
$exchange_rate             $_REQUEST['exchange_rate']; 
        
$paymentDateTime         $_REQUEST['paymentDateTime']; 
        
$md5                                 $_REQUEST['md5']; 
    
        
//производим проверки входных данных 
        
if (empty($onpay_id)) {$error .="Не указан id<br>";} 
        else {if (!
is_numeric(intval($onpay_id))) {$error .="Параметр не является числом<br>";}} 
        if (empty(
$order_amount)) {$error .="Не указана сумма<br>";} 
        else {if (!
is_numeric($order_amount)) {$error .="Параметр не является числом<br>";}} 
        if (empty(
$balance_amount)) {$error .="Не указана сумма<br>";} 
        else {if (!
is_numeric(intval($balance_amount))) {$error .="Параметр не является числом<br>";}} 
        if (empty(
$balance_currency)) {$error .="Не указана валюта<br>";} 
        else {if (
strlen($balance_currency)>4) {$error .="Параметр слишком длинный<br>";}} 
        if (empty(
$order_currency)) {$error .="Не указана валюта<br>";} 
        else {if (
strlen($order_currency)>4) {$error .="Параметр слишком длинный<br>";}} 
        if (empty(
$exchange_rate)) {$error .="Не указана сумма<br>";} 
        else {if (!
is_numeric($exchange_rate)) {$error .="Параметр не является числом<br>";}} 
    
        
//если нет ошибок 
            
if (!$error) { 
                if (
is_numeric($pay_for)) {
                    
//Если pay_for - число 
                    
$sum floatval($order_amount); 
                    
$rezult data_get_created_operation($pay_for);
                    if (
mysql_num_rows($rezult) == 1) { 
                        
//создаем строку хэша с присланных данных 
                        
$md5fb strtoupper(md5($_REQUEST['type'].";".$pay_for.";".$onpay_id.";".$order_amount.";".$order_currency.";".get_constant('private_code'))); 
                        
//сверяем строчки хеша (присланную и созданную нами) 
                        
if ($md5fb != $md5) {
                            
$rezult answerpay($_REQUEST['type'], 8$pay_for$order_amount$order_currency'Md5 signature is wrong. Expected '.$md5fb$onpay_id);
                        } else { 
                            
$time time(); 
                            
$rezult_balance get_constant('use_balance_table') ? data_update_user_balance($pay_for$sum) : true;
                            
$rezult_operation data_set_operation_processed($pay_for);
                            
//если оба запроса прошли успешно выдаем ответ об удаче, если нет, то о том что операция не произошла 
                            
if ($rezult_operation && $rezult_balance) {
                                
$rezult answerpay($_REQUEST['type'], 0$pay_for$order_amount$order_currency'OK'$onpay_id);
                            } else {
                                
$rezult answerpay($_REQUEST['type'], 9$pay_for$order_amount$order_currency'Error in mechant database queries: operation or balance tables error'$onpay_id);
                            } 
                        }
                    } else {
                        
$rezult answerpay($_REQUEST['type'], 10$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'], 11$pay_for$order_amount$order_currency'Error in parameters data'$onpay_id); 
                } 
            } else {
                
//Если есть ошибки 
                
$rezult answerpay($_REQUEST['type'], 12$pay_for$order_amount$order_currency'Error in parameters data: '.$error$onpay_id); 
            } 
    } 
    return 
$rezult;
}
?>
Онлайн: 2
Реклама