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'; ?>
Выполнить команду
Для локальной разработки. Не используйте в интернете!