Файл: silawar.ru/protected/controllers/PumpitapiController.php
Строк: 127
<?php
class PumpitapiController extends Controller {
    public function accessRules() {
        return array(
            array('allow',
                'actions' => array('index'),
                'users' => array('*'),
            ),
            array('deny',
                'users' => array('*'),
                'deniedCallback' => array(Yii::app()->controller, 'redirectToHome'),
            )
        );
    }
    public function actionIndex($action = null) {
        $pumpit_params = array();
        
        $pumpit_params['APP_ID'] = 92;              // id игры, выдает администрация Pumpit
        $pumpit_params['API_HOST'] = "http://pumpit.ru/riba_api/?"; // HOST PUMPIT
        $pumpit_params['KEY_API'] = 'UKHifLS4EjOHAlG9j';    // ключ подписи ко всем запросам кроме биллинговых, выдает администрация Pumpit
        $pumpit_params['KEY_BILLING'] = 'jjhX5YSPNtPf3EyNw';    // ключ подписи для биллинговых запросов, выдает администрация Pumpit
        $pumpit_params['LOG'] = '/var/log/pumpit.log';   // файл для записи логов
        // Если сессия пустая или сброс сессии,то пользователь не авторизован
        if (!isset($_SESSION['p_sid'])) {
            $_SESSION['pumpit_id'] = 0;
            $_SESSION['p_sid'] = '';
            $_SESSION['p_user_info'] = array();
        }
        // Сохраняем в сессии заголовки проксирования
        if (!isset($_SESSION['x_host']) && isset($_SERVER['HTTP_X_HOST'])) {
            $_SESSION['x_host'] = $_SERVER['HTTP_X_HOST'];
        }
        if (!isset($_SESSION['x_partner']) && isset($_SERVER['HTTP_X_PARTNER'])) {
            $_SESSION['x_partner'] = $_SERVER['HTTP_X_PARTNER'];
        }
        $pumpit = new Pumpit($pumpit_params);
        // Если пришел запрос GetAppOnline, то нужно вернуть число пользователей онлайн
        if (!empty($action) && ($action == 'GetAppOnline') && $pumpit->checkRequest($_SERVER['QUERY_STRING'])) {
            // Здесь реализовывается логика определения пользователей online и передается ответ Pumpit
            $online_number = Users::countOnline();
            $xml_response = '<?xml version="1.0" encoding="utf-8"?>
                <response>
                       <online>' . $online_number . '</online>
                </response>';
            echo $xml_response;
            exit();
        }
        
        // Если пришел запрос DoLogin то записываем в сессию
        if (!empty($action) && ($action == 'DoLogin') && $pumpit->checkRequest($_SERVER['QUERY_STRING'])) {
            $_SESSION['pumpit_id'] = (int)$_GET['login'];
            $_SESSION['p_sid'] = $_GET['p_sid'];
//            $res = $pumpit->getMyProfile($_GET['p_sid']);
//            if ($res) {
//                $_SESSION['p_user_info'] = $res;
//            }
            //Проверяем есть ли у пользователя персонаж в игре или нет
            $user = Users::findPartnerUser($_SESSION['pumpit_id']);
            if ($user->id_user) {
                $password = md5('pumpit'.$_SESSION['pumpit_id']);
                $login = new LoginForm;
                $login->login = $user->login;
                $login->password = $password;
                $login->login();
            }
            $this->redirect('http://'.$_SERVER['HTTP_X_HOST']);
            Yii::app()->end();
//            if (!empty($_GET['url'])) {
//                // Здесь нужно перекинуть пользователя по запрашиваемому url
//                $this->redirect($_GET['url']);
//                Yii::app()->end();
//            }
        }
        // Если пришел запрос PaymentOk то надо нотифицировать Pumpit о том что запрос принят и деньги переведены в игру
        if (!empty($action) && ($action == 'PaymentOk') && $pumpit->checkRequest($_SERVER['QUERY_STRING'], true)) {
            $query_string = $_SERVER['QUERY_STRING'];
            parse_str($query_string, $query);
            /* Теперь массив query содержит следующие данные
              action   - приходит всегда
              amount   - приходит всегда
              app_id   - приходит всегда
              coin     - приходит всегда
              login    - приходит всегда
              trans_id - приходит всегда
              sig      - приходит всегда
              app_tid  - приходит если был передан при запросе DoIncAppAccount как элемент массива третим параметром
              app_uid  - приходит если был передан при запросе DoIncAppAccount как элемент массива третим параметром
              Здесь надо реализовать логику зачисления и отправить Pumpit ответ
              если зачисление успешно то    $ans = '<status>OK</status>';
              если зачисление не успешно то $ans = '<status>CANCEL</status>';
             */
            $user = Users::findPartnerUser($query['login']);
            if ($user) {
                $params = array(
                    5 => 5,
                    10 => 10,
                    55 => 50,
                    300 => 250,
                    1000 => 800,
                );
                $key = array_search($query['coin'], $params);
                if (!isset($key)) {
                    echo '<status>CANCEL</status>';
                    exit();
                }
                $money = $key * 100;
                /**
                 * Для акции на премиум в подарок 
                 */
                if ($money >= 1000) {
                    $time = floor($money/1000);
                    $bonus = Actions::getBonusValue(4);
                    if ($bonus > 0 && $time > 0) {
                        if ($user->premium_time > time())
                            $user->premium_time += 60 * 60 * 24 * $time;
                        else
                            $user->premium_time = time() + 60 * 60 * 24 * $time;
                        if (!$user->save(false)) {
                            throw new CHttpException(500, Yii::t('layout', 'Ошибка при сохранении пользователя!'));
                        } 
                    }
                }
                $id_dialog = Users::checkDialog($user->id_user, 100);
                $mail = new UsersMessages();
                $mail->id_dialog = $id_dialog;
                $mail->id_user = 100;
                $mail->users = $user->id_user;
                $mail->type = 1;
                $mail->message = 'Пополнение счета';
                $bonus = Actions::getBonusValue(1);
                $mail->money = $bonus ? round($money + ($money/100)*$bonus) : $money;
                if (!$mail->save(false)) {
                    throw new CHttpException(500, Yii::t('layout', 'Ошибка при отправке почты!'));
                }
                
                //Проверяем достиг ли игрок 10 уровень и является ли он рефералом
                if ($user->level >= 10 && $user->id_ref > 0 && isset($user->idRef)) {
                    $money = round($money/10);
                    $id_dialog = Users::checkDialog($user->id_ref, 100);
                    $mail = new UsersMessages();
                    $mail->id_dialog = $id_dialog;
                    $mail->id_user = 100;
                    $mail->users = $user->id_ref;
                    $mail->type = 1;
                    $mail->message = 'Бонус за друга';
                    $mail->money = $money;
                    if (!$mail->save(false)) {
                        throw new CHttpException(500, Yii::t('layout', 'Ошибка при отправке почты!'));
                    }
                }
                $log = new DonateLog();
                $log->id_user = $user->id_user;
                $log->tid = $query['trans_id'];
                $log->value = $key;
                $log->type = 5;
                $log->result = 1;
                $log->save(false);
                $ans = '<status>OK</status>';
            }
            else {
                $ans = '<status>CANCEL</status>';
            }
            echo $ans;
            exit();
        }
    }
}