Перейти к содержанию

Проверка подписи🔗

Данные в виде POST массива🔗

Подпись вычисляется следующим способом: данные (data), которые мы собираемся передать, сортируются рекурсивно по ключам по возрастанию.
Пример сортировки на языке PHP (Сортировка нужна, только если данные передаются не в виде JSON)

$data = $_POST;
if ( !$data['action'] ) $data['action'] = $_GET['action'];

function client_data_cmp($a, $b) {
    if (is_numeric($a) && is_numeric($b)) {
        return $a > $b;
    }
    return strcasecmp($a, $b);
}

function uksort_tree(&$array) {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            uksort_tree( $array[$key]);
        }
    }
    uksort($array, "client_data_cmp");
}

uksort_tree($data);

Перед сортировкой нужно проверить наличие параметра action. Если его нет, взять из параметров GET!
Теперь собираем данные в одну строку с помощью http_build_query()
Добавляем к строке серверный секретный ключ через символ амперсанд (&).
Своего рода, секретный ключ является солью для хэша, который теперь мы получаем из всей получившейся строки данных.
md5() от строки данных и есть подпись, который мы дописываем GET-параметром с ключом hash

Пример создания hash на языке PHP

$query = http_build_query($data);
$hash = md5($query . '&'. $secret_key);

Игровой сервер должен быть готов обработать данные, отправляемые с MRGS и ответить в json-формате, {"status":0} если все прошло успешно.
В противном случае игровой сервер должен ответить любым отрицательным целым числом в статусе, которое будет записано в базу, как error_code.
Так же игровой сервер может дописать текстовое описание ошибки, которая произошла, в ключе error
К примеру, игровой сервер ожидал, что мы отправим ему bonus, но этого не произошло. По каким-то причинам данные о бонусе не пришли.
В этом случае необходимо ответить к примеру: -1. Необходимо так же у себя помечать, какой код - какой ошибке соответствует.
В дальнейшем все неудавшиеся отправки будут обрабатываться вручную.

Данные в виде JSON🔗

Подпись запросов для данных пришедших в виде JSON делается чуть проще. Данные уже отсортированы на сервере. Вам нужно только добавить к строке символ амперсанд (&) и серверный секретный ключ.
И от этой строки взять md5().

$f = fopen('php://input','r');
if ($f) {
    $post = '';
    do {
        $d = fread($f,1024);
        $post .= $d;
    } while ($d);
    fclose($f);
}
$hash = md5($post . '&'. $secret_key);

Если в настройках приложения установлена галочка "Автоматическое закрытие платежей и бонусов", то серверу необходимо на успешную обработку ответить {"status":0}
ДАЖЕ ЕСЛИ ТАКОЙ ПЛАТЕЖ ИЛИ БОНУС УЖЕ ПРИХОДИЛИ И ОБРАБАТЫВАЛИСЬ! Это нужно для того, чтобы MRGS на своем сервере тоже закрыл платеж или бонус и не присылал его еще раз


Последнее обновление: 2020-02-25
Дата создания: 2020-02-17