PHP WebShell

Текущая директория: /var/www/bitcardoApp/user/fiat

Просмотр файла: send_fiat_test.php

<?php

include '../common/header.php';
require_once "../../config/db_config.php";

// Build bank list
$bankOptions = [];

/**
 * REMOVE THIS BLOCK WHEN GOING LIVE!
 */
$bankOptions[] = [
    "name" => "Test Bank",
    "code" => "058"
];

// Fetch live banks
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.paystack.co/bank");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $paystackSecret"
]);
$response = curl_exec($ch);
curl_close($ch);

$banks = json_decode($response, true);

if ($banks && isset($banks["data"])) {
    foreach ($banks["data"] as $bank) {
        $bankOptions[] = [
            "name" => $bank["name"],
            "code" => $bank["code"]
        ];
    }
}

?>

<style>
    .form-container {
      max-width: 600px;
      margin: 2rem auto;
      padding: 2rem;
      border-radius: 12px;
      background: #f8f9fa;
      box-shadow: 0 4px 12px rgba(0,0,0,0.05);
    }
    .autocomplete-list {
      position: absolute;
      z-index: 1000;
      background: white;
      border: 1px solid #ddd;
      width: 100%;
      max-height: 200px;
      overflow-y: auto;
    }
    .autocomplete-item {
      padding: 8px;
      cursor: pointer;
    }
    .autocomplete-item:hover {
      background-color: #f1f1f1;
    }
</style>

<!-- Main Container -->
<div class="container mt-3">
    <div class="row">
        <? include '../common/nav.php'; ?>

        <main class="col-md-9 col-lg-10 px-md-5 mb-5">
            <? include '../common/page-header.php'; ?>

            <div class="form-container">
                <h3 class="mb-4 text-center">Send Naira to Bank Account (TEST)</h3>
                <form id="sendFiatForm" action="../../models/fiat/process_send_fiat.php" method="post">

                    <div class="mb-3 position-relative">
                        <label for="bank_search" class="form-label">Bank</label>
                        <input type="text" class="form-control" id="bank_search" placeholder="Start typing bank name..." autocomplete="off">
                        <div id="bank_suggestions" class="autocomplete-list d-none"></div>
                        <input type="hidden" name="bank_code" id="bank_code">
                    </div>

                    <div class="mb-3">
                        <label for="account_number" class="form-label">Account Number</label>
                        <input type="text" class="form-control" name="account_number" id="account_number" maxlength="10" required>
                    </div>

                    <div class="mb-3">
                        <label for="account_name" class="form-label">Account Name</label>
                        <input type="text" class="form-control" name="account_name" id="account_name" readonly required>
                    </div>

                    <div class="mb-3">
                        <label for="amount" class="form-label">Amount (NGN)</label>
                        <input type="number" class="form-control" name="amount" id="amount" required min="1">
                    </div>

                    <div class="mb-3">
                        <label for="reason" class="form-label">Reason <span class="text-muted">(Optional)</span></label>
                        <input type="text" class="form-control" name="reason" id="reason">
                    </div>

                    <button type="submit" id="sendBtn" class="btn btn-success w-100" disabled>Send Naira</button>
                </form>
            </div>
        </main>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', () => {
    const bankInput = document.getElementById('bank_search');
    const bankSuggestions = document.getElementById('bank_suggestions');
    const hiddenBankCode = document.getElementById('bank_code');

    const bankList = <?= json_encode($bankOptions) ?>;

    bankInput.addEventListener('input', function() {
        const query = this.value.toLowerCase().trim();
        bankSuggestions.innerHTML = '';
        hiddenBankCode.value = '';

        if (query.length === 0) {
            bankSuggestions.classList.add('d-none');
            checkForm();
            return;
        }

        const matches = bankList.filter(bank =>
            bank.name.toLowerCase().includes(query)
        );

        if (matches.length > 0) {
            matches.forEach(bank => {
                const div = document.createElement('div');
                div.classList.add('autocomplete-item');
                div.textContent = bank.name;
                div.dataset.bankCode = bank.code;
                div.addEventListener('click', () => {
                    bankInput.value = bank.name;
                    hiddenBankCode.value = bank.code;
                    bankSuggestions.classList.add('d-none');
                    checkForm();
                });
                bankSuggestions.appendChild(div);
            });
            bankSuggestions.classList.remove('d-none');
        } else {
            bankSuggestions.classList.add('d-none');
        }

        checkForm();
    });

    document.addEventListener('click', function(e) {
        if (!bankSuggestions.contains(e.target) && e.target !== bankInput) {
            bankSuggestions.classList.add('d-none');
        }
    });

    const accountInput = document.getElementById('account_number');
    const accountNameInput = document.getElementById('account_name');
    const amountInput = document.getElementById('amount');
    const reasonInput = document.getElementById('reason');
    const sendBtn = document.getElementById('sendBtn');

    function checkForm() {
        if (
            hiddenBankCode.value &&
            accountInput.value.length === 10 &&
            accountNameInput.value &&
            amountInput.value
        ) {
            sendBtn.disabled = false;
        } else {
            sendBtn.disabled = true;
        }
    }

    accountInput.addEventListener('input', () => {
        if (accountInput.value.length === 10 && hiddenBankCode.value) {
            if (hiddenBankCode.value === "999999") {
                // Test Bank logic
                accountNameInput.value = "TEST ACCOUNT";
                checkForm();
            } else {
                fetch('resolve_account.php?account_number=' + accountInput.value + '&bank_code=' + hiddenBankCode.value)
                    .then(response => response.json())
                    .then(data => {
                        console.log(data);
                        if (data.status && data.data.account_name) {
                            accountNameInput.value = data.data.account_name;
                        } else {
                            accountNameInput.value = '';
                            alert('Account could not be resolved.');
                        }
                        checkForm();
                    })
                    .catch(() => {
                        accountNameInput.value = '';
                        alert('Error connecting to Paystack.');
                        checkForm();
                    });
            }
        } else {
            accountNameInput.value = '';
            checkForm();
        }
    });

    accountNameInput.addEventListener('input', checkForm);
    amountInput.addEventListener('input', checkForm);
    reasonInput.addEventListener('input', checkForm);
});
</script>

<? include '../common/footer.php'; ?>

Выполнить команду


Для локальной разработки. Не используйте в интернете!