Проверка подписи🔗
Данные в виде 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
Игровой сервер должен быть готов обработать данные, отправляемые с 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-17