Файл: silawar.ru/protected/controllers/PaymentController.php
Строк: 244
<?php
class PaymentController extends Controller {
public function accessRules() {
return array(
array('deny',
'roles' => array('banned'),
'deniedCallback' => array(Yii::app()->controller, 'redirectToHome'),
),
array('allow',
'actions' => array('index', 'webmoney', 'xsolla', 'xbillForAPI', 'xsollaAPI'),
'users' => array('*'),
),
array('deny',
'users' => array('*'),
'deniedCallback' => array(Yii::app()->controller, 'redirectToHome'),
)
);
}
public function actionIndex($type = 'mobilePayment') {
$params = array();
$secret_key = 'JsLzz,;@hezGx/cyQKQj(RRi;4+z]/aX';
if ($type == 'mobilePayment' && isset($_POST['phone']) && isset($_POST['number'])) {
$price = Yii::app()->request->getParam('number') * 2;
$dopparam['user'] = Yii::app()->user->id;
$dopparam['gold'] = Yii::app()->request->getParam('number');
$mk = XBill::mk_create_pay(
Yii::app()->request->getParam('phone'), $price, 'Покупка в silawar.ru ' . Yii::app()->request->getParam('number') . ' золота (ID: ' . Yii::app()->user->id . ')', 'Золото отправлено. C ув. команда silawar.ru', $dopparam
);
if ($mk['status'] == 0) {
$text = 'Платеж успешно создан,
Номер платежа в системе: : ' . $mk['id'] . '.
На Ваш номер отправлено SMS, следуйте интсрукциям для получения золота';
Yii::app()->user->setFlash('info', $text);
} else {
$text = 'Ошибка #' . $mk['status'] . ': ' . $mk['status_desc'];
Yii::app()->user->setFlash('error', $text);
}
$this->redirect('/payment/');
Yii::app()->end;
}
if ($type == 'mobilePaymentAlt' && isset($_POST['phone']) && isset($_POST['number'])) {
//Подготовка параметров
$request['command'] = 'invoice';
$request['project'] = 22342;
$request['v1'] = Yii::app()->user->id;
$request['phone'] = Yii::app()->request->getParam('phone');
$request['out'] = Yii::app()->request->getParam('number');
// Формирование подписи
$md5 = '';
foreach ($request as $value) {
$md5.= $value;
}
$request['md5'] = md5($md5 . $secret_key);
// Формирование строки запроса
$url = 'https://secure.xsolla.com/api/mobile/payment/index.php?';
foreach ($request as $key => $value) {
$url.=$key . '=' . urlencode($value) . '&';
}
$url = rtrim($url, '&');
$answer = FuncHelper::sendCurl($url);
if ($answer->result == 0) {
$log = new DonateLog();
$log->id_user = Yii::app()->user->id;
$log->tid = $answer->invoice;
$log->value = Yii::app()->request->getParam('number');
$log->phone = Yii::app()->request->getParam('phone');
$log->type = 3;
$log->result = 0;
if (!$log->save(false)) {
throw new CHttpException(500, Yii::t('layout', 'Ошибка при сохранении лога!'));
}
Yii::app()->user->setFlash('info', 'Счет успешно выставлен, ожидайте SMS');
} else {
Yii::app()->user->setFlash('error', $answer->comment);
}
// $this->redirect('/payment/');
// Yii::app()->end;
} elseif ($type == 'terminals') {
//Подготовка параметров
$request['project'] = 22342;
$request['v1'] = Yii::app()->user->id;
$request['format'] = 'xml';
// Формирование подписи
$md5 = '';
foreach ($request as $value) {
$md5.= $value;
}
$request['md5'] = md5($md5 . $secret_key);
// Формирование строки запроса
$url = 'https://api.xsolla.com/xsolla_number.php?';
foreach ($request as $key => $value) {
$url.=$key . '=' . urlencode($value) . '&';
}
$url = rtrim($url, '&');
$answer = FuncHelper::sendCurl($url);
$params['number'] = $answer->number;
}
elseif ($type == 'qiwi' && isset($_POST['phone']) && isset($_POST['number'])) {
//Подготовка параметров
$request['command'] = 'invoice';
$request['project'] = 22342;
$request['v1'] = Yii::app()->user->id;
$request['phone'] = Yii::app()->request->getParam('phone');
$request['out'] = Yii::app()->request->getParam('number');
$request['ps'] = 'qiwi';
// Формирование подписи
$md5 = '';
foreach ($request as $value) {
$md5.= $value;
}
$request['md5'] = md5($md5 . $secret_key);
// Формирование строки запроса
$url = 'https://secure.xsolla.com/api/invoicing/index.php?';
foreach ($request as $key => $value) {
$url.=$key . '=' . urlencode($value) . '&';
}
$url = rtrim($url, '&');
$answer = FuncHelper::sendCurl($url);
if ($answer->result == 0) {
$log = new DonateLog();
$log->id_user = Yii::app()->user->id;
$log->tid = $answer->invoice;
$log->value = Yii::app()->request->getParam('number');
$log->phone = Yii::app()->request->getParam('phone');
$log->type = 4;
$log->result = 0;
if (!$log->save(false)) {
throw new CHttpException(500, Yii::t('layout', 'Ошибка при сохранении лога!'));
}
Yii::app()->user->setFlash('info', 'Счет успешно выставлен. Теперь Вам необходимо оплатить его через терминал QIWI или на сайте <a href="http://wap.qiwi.ru">wap.qiwi.ru</a>');
} else {
Yii::app()->user->setFlash('error', $answer->comment);
}
// $this->redirect('/payment/', array('type' => 'qiwi'));
// Yii::app()->end;
} elseif ($type == 'webmoney') {
$params = array(
5 => 10,
10 => 20,
55 => 100,
300 => 500,
1000 => 1500,
);
} elseif ($type == 'free') {
$criteria = new CDbCriteria();
$criteria->compare('id_ref', Yii::app()->user->id);
$criteria->addCondition('level >= 10');
$params['count'] = Users::model()->count($criteria);
}
elseif (isset($_SERVER['HTTP_X_HOST'])) {
$pumpit = new Pumpit(Yii::app()->params->pumpit_params);
// Если пользователь хочет перейти в кошелек Pumpit
if ($type == 'wallet') {
$url = $pumpit->doPumpitPayment($_SESSION['p_sid']);
$this->redirect($url);
Yii::app()->end();
}
$params = array(
5 => 5,
10 => 10,
55 => 50,
300 => 250,
1000 => 800,
);
// Если пользователь хочет купить что-либо в игре
if (isset($_POST['value'])) {
$coins = (isset($params[$_POST['value']]) ? $params[$_POST['value']] : $params[10]);
$url = $pumpit->doIncAppAccount($_SESSION['p_sid'], $coins);
$this->redirect($url);
Yii::app()->end();
}
}
$this->render('index', array(
'type' => $type,
'params' => $params
));
}
public function actionWebmoney() {
$result = Yii::app()->request->getParam('result');
$id_user = Yii::app()->request->getParam('idChar');
$value = Yii::app()->request->getParam('valueChar');
if ($result && $result == 'success' && $id_user && $value) {
$money = $value * 100;
$user = Users::findUser($id_user);
/**
* Для акции на премиум в подарок
*/
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($id_user, 100);
$mail = new UsersMessages();
$mail->id_dialog = $id_dialog;
$mail->id_user = 100;
$mail->users = $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', 'Ошибка при отправке почты!'));
}
$log = new DonateLog();
$log->id_user = $id_user;
$log->value = $value;
$log->type = 1;
$log->result = 1;
if (!$log->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', 'Ошибка при отправке почты!'));
}
}
$this->redirect('/mail/index', array('sort' => 'new'));
Yii::app()->end();
} elseif ($result && $result == 'fail') {
Yii::app()->user->setFlash('error', 'Ошибка! Ваш счет не пополнен.');
$this->redirect('/user/index');
Yii::app()->end();
}
}
public function actionBank() {
$v1 = 'v1=' . Yii::app()->user->id . 'JsLzz,;@hezGx/cyQKQj(RRi;4+z]/aX';
$project = 'project=22342';
$sign = md5($project . $v1);
$this->redirect('https://secure.xsolla.com/paystation2/?marketplace=mobile&project=12548&v1=' . Yii::app()->user->id . '&hidden=v1,project&local=ru&sign=' . $sign);
$this->render('bank', array(
'values' => $values
));
}
public function actionXsolla() {
$v1 = 'v1=' . Yii::app()->user->id . 'JsLzz,;@hezGx/cyQKQj(RRi;4+z]/aX';
$project = 'project=22342';
$sign = md5($project . $v1);
$this->redirect('https://secure.xsolla.com/paystation2/?marketplace=mobile&project=12548&v1=' . Yii::app()->user->id . '&hidden=v1,project&local=ru&sign=' . $sign);
}
public function actionXsollaAPI() {
$xsolla = new Xsolla();
$xsolla->process();
}
public function actionXbillForAPI() {
if (
isset($_GET['order']) &&
isset($_GET['phone']) &&
isset($_GET['order_status']) &&
isset($_GET['merchant_price']) &&
isset($_GET['paytouser']) &&
isset($_GET['time']) &&
isset($_GET['sign'])) {
$secret_key = "hmONCD8TEa6SUeRd"; # Секретный ключ (Указан в настройках проекта)
$order_id = (isset($_GET['order_id']) ? $_GET['order_id'] : null); # Номер заказа переданный Вами в форму оплаты.
$order = $_GET['order']; # Уникальный номер платежа
$phone = $_GET['phone']; # Номер телефона покупателя
$order_status = $_GET['order_status']; # Статус платежа
$merchant_price = $_GET['merchant_price']; # Сумма которую оператор списывает со счета покупателя
$time = $_GET['time'];
$sign = $_GET['sign']; # Контрольная подпись
$id_user = (int) $_GET['user'];
$gold = (int) $_GET['gold'];
$money = $gold * 100;
$truesign = md5($order . $phone . $merchant_price . $secret_key);
if ($sign == $truesign) {
# Если контрольная строка совпадает:
echo "ok";
if ($order_status == 'success') {
$user = Users::findUser($id_user);
/**
* Для акции на премиум в подарок
*/
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($id_user, 100);
$mail = new UsersMessages();
$mail->id_dialog = $id_dialog;
$mail->id_user = 100;
$mail->users = $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', 'Ошибка при отправке почты!'));
}
$log = new DonateLog();
$log->id_user = $id_user;
$log->value = $gold;
$log->phone = $phone;
$log->type = 3;
$log->result = 1;
if (!$log->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', 'Ошибка при отправке почты!'));
}
}
}
} else {
echo "error(sign)";
exit();
}
} else {
echo "error(count(" . count($_GET) . "))";
exit();
}
}
}