Задать вопрос
@No4NaMe

Почему в интеркасса при отмене платежа он засчитывается?

У меня сайт с автоматизированными услугами, когда человек оплачивает услугу, она засчитывается ему с помощью rcon запроса на игровой сервер, путём команды, уже как минимум 3 платежа прошли статусе "отменен" но услуга игроку предоставилась! как так подскажите? я все возможные путы обошел, но пробелов в скрипте на нашел!

Оператор предоставил код оплаты игрока:
"dt": {
        "ik_co_id": "5ebe7fa51ae1bd2c008b4574",
        "ik_co_prs_id": "404267836591",
        "ik_inv_id": "228735970",
        "ik_inv_st": "canceled",
        "ik_inv_crt": "2020-07-10 21:47:59",
        "ik_inv_prc": "2020-07-11 00:00:16",
        "ik_trn_id": "",
        "ik_pm_no": "ID_85",
        "ik_pw_via": "mts_mpay_merchantContent_rub",
        "ik_am": "49.00",
        "ik_co_rfn": "48.1670",
        "ik_ps_price": "52.02",
        "ik_cur": "RUB",
        "ik_desc": "Покупка т",
        "ik_cli": "pavelnoyokko@gmail.com",
        "ik_sign": "BNDmA8BC3UjGGgjZC2FGZg=="
      },


Мой result:
<?php
define("TKM", true);
require(realpath("../../engine.php"));

if ($_SERVER['REQUEST_METHOD'] == "POST") {
	function ikSign($params, $ikKey) {
		unset($params['ik_sign']);
		foreach ($params as $key => $value)
			if (!preg_match("/^ik_/is", $key))
				unset($params[$key]);

		ksort($params, SORT_STRING);
		array_push($params, $ikKey);
		$sign = implode(":", $params);
		$sign = base64_encode(md5($sign, true));
		return $sign;
	}

	$kassaId = trim($_POST['ik_co_id']);
	$PayID = trim(strip_tags($_POST['ik_pm_no']));
	$summ = intval($_POST['ik_am']);
	$paySystem = trim($_POST['ik_pw_via']);
	$payStatus = trim($_POST['ik_inv_st']);
	$sign = trim($_POST['ik_sign']);
	$ik_payment_timestamp = trim($_POST['ik_inv_prc']);
	$secretKey = $интеркасса['settings']['secret_key'];
	$PayID = explode("_", $PayID);
	$PayID = $PayID['1'];

	if ($интеркасса['settings']['testing'] && ($paySystem == "test_интеркасса_test_xts")) {
		$secretKey = $интеркасса['settings']['testing_key'];
	} elseif ($paySystem == "test_интеркасса_test_xts") {
		exit("OK");
	}

	if ($kassaId != $интеркасса['settings']['shop_id']) {
		exit("Not valid shop ID!");
	}

	if ($sign != ikSign($_POST, $secretKey)) {
		exit("Bad sign");
	}

	$payment = new Payment;
	$status = $payment->select($PayID, $summ);

	if (!$status) {
		exit($status);
	}

	$status = $payment->give();

	if (!$status) {
		exit($status);
	}
}

exit("OK");


form.php
<?php
if (!defined("TKM")) die("<pre>Access denied!</pre>");
exit(header("Location: /?ik_co_id={$интеркасса['settings']['shop_id']}&ik_pm_no=ID_{$payid}&ik_am={$cost}&ik_cur=RUB&ik_desc={$desc}"));
  • Вопрос задан
  • 434 просмотра
Подписаться 2 Сложный Комментировать
Пригласить эксперта
Ответы на вопрос 1
@AndryG
$payStatus = trim($_POST['ik_inv_st']); -- больше переменная в коде не встречается


Вам присылают уведомление о изменении статуса платежа, а вы игнорируете этот статус и выдаюете плюшки клиентам.

Что за игра? Любопытно глянуть на сервер :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы