// глобальная переменная для статуса STEAM var STEAM_STATUS = "unchecked"; // unchecked | ok | fail // ================================ // выбор валюты // ================================ function pay_local_set(instring) { jQuery("#local-paykind").val(instring); if (instring === "KZT") { jQuery("#curr-n1").text("KZT"); jQuery("#pay-common-RUB").hide(); jQuery("#pay-common-EXT").hide(); jQuery("#pay-common-KZT").show(); } else { jQuery("#curr-n1").text("RUB"); jQuery("#pay-common-RUB").show(); jQuery("#pay-common-EXT").show(); jQuery("#pay-common-KZT").hide(); } } // ================================ // пересчёт суммы (только сумма!) // ================================ function updateAmountInfo() { try { var i = jQuery("#amount-acc").val(); i = i.replace(/[^0-9,\.]/g, "").replace(/,/, "."); i = i * 100; i = i.toFixed(0); var r = (i * WA_VARS.rate) / 100; var sumText = r.toLocaleString("ru") + " " + jQuery("#curr-n1").text(); jQuery("#amount-pay") .text("Баланс пополнится на " + sumText) .css("color", "green") .show(); return sumText; } catch (error) { jQuery("#amount-pay").text("").hide(); return ""; } } // ================================ // UTF-8 декодер из base64 // ================================ function b64_to_utf8(str) { const bytes = Uint8Array.from(atob(str), (c) => c.charCodeAt(0)); return new TextDecoder("utf-8").decode(bytes); } // ================================ // проверка steam через прокси // ================================ function checkSteamAccount(acc, force = false) { if (!acc) { jQuery("#account-pay") .text("Аккаунт STEAM не указан") .css("color", "red") .show(); STEAM_STATUS = "fail"; return; } jQuery("#account-pay") .text("Проверяем аккаунт «" + acc + "»...") .css("color", "orange") .show(); return fetch("/payment-form/steamcheck.php?acc=" + encodeURIComponent(acc)) .then((resp) => resp.json()) .then((data) => { if ( data && data.response && data.response.players && data.response.players.length > 0 ) { jQuery("#account-pay") .text("Аккаунт STEAM «" + acc + "» подтверждён ✅") .css("color", "green"); STEAM_STATUS = "ok"; } else { jQuery("#account-pay") .text("Аккаунт STEAM «" + acc + "» не существует ❌") .css("color", "red"); STEAM_STATUS = "fail"; } }) .catch(() => { jQuery("#account-pay") .text("Ошибка при проверке аккаунта «" + acc + "»") .css("color", "red"); STEAM_STATUS = "fail"; }); } // ================================ // выполнение платежа // ================================ async function pay_local_exec(local_paykind) { var acc = jQuery("#steam_number").val().trim(); if (!acc) { jQuery("#account-pay") .text("Сначала укажите аккаунт STEAM!") .css("color", "red") .show(); return false; } // если статус не проверен или ошибка → перепроверяем if (STEAM_STATUS !== "ok") { await checkSteamAccount(acc, true); if (STEAM_STATUS !== "ok") { return false; } } // всё ок → продолжаем оплату var valid = false; pay_local_set(local_paykind); jQuery("#transnumber") .removeClass("text-danger text-warning") .text("Переход на защищенную страницу оплаты, подождите...") .addClass("text-warning"); try { var m = jQuery("#mail").val(); var i = jQuery("#amount-acc").val(); i = i.replace(/[^0-9,\.]/g, "").replace(/,/, "."); i = i * 100; i = i.toFixed(0); var regpayment = jQuery.ajax({ async: false, url: "/payment-form/regpayment.php", type: "post", data: { amount: i, mail: m, number: acc, steam_number: acc, paykind: local_paykind, }, dataType: "TEXT", }).responseText; if (!regpayment || regpayment.indexOf("|") === -1) { jQuery("#transnumber") .text("Ошибка сервера: пустой или неверный ответ") .addClass("text-danger"); return false; } var fields = regpayment.split("|"); if (fields.length < 6) { jQuery("#transnumber") .text("Ошибка: неполные данные от сервера") .addClass("text-danger"); return false; } if (fields[2] && fields[2].length > 0) { jQuery("#transnumber").text(fields[2]); } if (fields[0] && fields[0].length > 1) { valid = true; var descr = b64_to_utf8(fields[5] || ""); jQuery("#number-" + local_paykind).val(fields[0]); jQuery("#signature-" + local_paykind).val(fields[3]); jQuery("#amount-" + local_paykind).val(fields[4]); jQuery("#description-" + local_paykind).val(descr); } else { jQuery("#transnumber") .text("Произошла ошибка при подготовке оплаты") .addClass("text-danger"); } } catch (error) { jQuery("#transnumber") .text("При переходе на страницу оплаты произошла ошибка") .addClass("text-danger"); } if (valid) { jQuery("#payf-" + local_paykind).submit(); } return false; } // ================================ // init // ================================ jQuery(document).ready(function () { // проверка Steam только при уходе из поля jQuery("#steam_number").on("blur", function () { STEAM_STATUS = "unchecked"; // сброс статуса при новом вводе checkSteamAccount(jQuery(this).val().trim()); }); // пересчёт суммы только при изменении суммы jQuery("#amount-acc").on("change", function () { updateAmountInfo(); }); // стартовые значения pay_local_set(WA_VARS.paykind); updateAmountInfo(); jQuery("#pay-kzt").on("click", function () { pay_local_set("KZT"); updateAmountInfo(); }); jQuery("#pay-rub").on("click", function () { pay_local_set("RUB"); updateAmountInfo(); }); });