<?php

# статус платежа, обратная ссылка
if (isset($_GET['paymentId']) && isset($_GET['account'])) { // параметры
if (stripos(URL, 'success')) $FUNC->go('/payment/ok'); // успешно
elseif (stripos(URL, 'fail')) $FUNC->go('/payment/no'); // провал
else $FUNC->go('/'); exit; } // неизвестно, на главную

# ограничение запросов, проверка ip - адресов
if (!in_array(IP, array('31.186.100.49', '178.132.203.105', '52.29.152.23', 
'52.19.56.234'))) { require_once MODS .'error/page.php'; exit; }

# работа с базой данных
$DB = new mysqli(DB['host'], DB['user'], DB['pass'], DB['name']); // подключение к базе данных
if ($DB->connect_errno) exit; $DB->set_charset('utf8'); // не работает база, переадресация, кодировка

# обработка статуса, проверка платежа
if (isset($_GET['method'])) { $url = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY); // обработка ссылки
parse_str($url, $parts); $params = $parts['params']; $sum = (int) $params['orderSum']; } // обработка параметров

####################

# обработка статуса, проверка платежа
if (isset($_GET['method']) && $_GET['method'] == 'check') {
if (db_exist($DB, 'payments', 'id', array('sum' => $sum, 'status' => 'none', 'user' => $params['account'])) && 
$params['projectId'] == PAY['id'] && $params['signature'] == $GAME->signature('check', $params)) { // проверка платежа
$pay = db_output($DB, 'payments', 'id', array('sum' => $sum, 'status' => 'none', 'user' => $params['account']), false, 'time', 0, 0, 'DESC'); // вывод платежа
db_update($DB, 'payments', array('num' => $params['unitpayId'], 'status' => 'check'), array('id' => $pay['id'])); } // обновление данных
echo json_encode(array('result' => array('message' => 'Запрос успешно обработан')), JSON_UNESCAPED_UNICODE); } // вывод результата

# обработка статуса, ошибка платежа
elseif (isset($_GET['method']) && $_GET['method'] == 'error') {
if (db_exist($DB, 'payments', 'id', array('num' => $params['unitpayId'], 'sum' => $sum, 'user' => $params['account'])) && 
$params['projectId'] == PAY['id'] && $params['signature'] == $GAME->signature('error', $params)) { // проверка платежа
$pay = db_output($DB, 'payments', 'id', array('num' => $params['unitpayId'], 'user' => $params['account'])); // вывод платежа
db_update($DB, 'payments', array('status' => 'error'), array('id' => $pay['id'])); } // обновление статуса
echo json_encode(array('error' => array('message' => 'Возникла ошибка при выполнении платежа')), JSON_UNESCAPED_UNICODE); } // вывод результата

# обработка статуса, успешный платеж
elseif (isset($_GET['method']) && $_GET['method'] == 'pay') {
if (db_exist($DB, 'payments', 'id', array('num' => $params['unitpayId'], 'status;!=' => 'pay', 'sum' => $sum, 'user' => $params['account'])) && 
$params['projectId'] == PAY['id'] && $params['signature'] == $GAME->signature('pay', $params)) { // проверка платежа
$pay = db_output($DB, 'payments', array('id', 'user'), array('num' => $params['unitpayId'], 'user' => $params['account'])); // вывод платежа
$money = $sum * 500; db_update($DB, 'users', array('money' =>  $money .';+'), array('id' => $pay['user'])); // изменение баланса игрока
db_update($DB, 'payments', array('status' => 'pay'), array('id' => $pay['id'])); } // обновление статуса
echo json_encode(array('result' => array('message' => 'Запрос успешно обработан')), JSON_UNESCAPED_UNICODE); } // вывод результата

# нет вывода данных
else exit;

?>