Endpoint: /api/orkut/createorkutnew
API ini digunakan untuk mengelola pembayaran QRIS, termasuk membuat QR baru, memperbarui QR dengan nominal baru, dan memeriksa status transaksi. Endpoint ini terintegrasi dengan bot WhatsApp untuk memproses pembelian seperti panel pterodactyl.
Memerlukan kunci API valid sebagai parameter query.
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
| merchant | String | Ya | Identifikasi merchant untuk transaksi |
| keyorkut | String | Ya | Kunci unik untuk transaksi |
| amount | Number | Ya* | Nominal pembayaran dalam rupiah + fee acak (contoh: 15001 untuk Rp15.000 + fee Rp1) |
| codeqr | String | Ya* | Kode QRIS untuk pembayaran |
| apikey | String | Ya | Kunci API untuk autentikasi |
* Wajib saat membuat/memperbarui QR
Dikembalikan saat membuat atau memperbarui QR:
{
"status": true,
"creator": "Fahri - OfficiaL",
"result": {
"qrImageUrl": "https://example.com/qr-image.png",
"amount": 15001,
"expiredAt": 1623456789000
}
}
Dikembalikan saat memeriksa status transaksi:
{
"status": true,
"creator": "Fahri - OfficiaL",
"result": {
"status": {
"status": "pending|success|failed",
"transaction": {
"amount": 15001,
"merchant": "[merchant]",
"keyorkut": "[keyorkut]",
"createdAt": 1623456789000
}
}
}
}
Dikembalikan saat terjadi kesalahan:
{
"error": "Parameter merchant dan keyorkut wajib diisi."
}
Membuat QRIS baru jika tidak ada transaksi sebelumnya atau status bukan pending. Memerlukan amount dengan fee acak dan codeqr.
Memperbarui QR untuk transaksi pending dengan amount (termasuk fee acak) dan codeqr baru.
Memeriksa status transaksi hanya dengan merchant dan keyorkut.
Mengirim notifikasi ke Telegram saat QR dibuat atau diperbarui.
Berikut adalah kode untuk perintah buyresellerpanelv2 pada bot WhatsApp yang menggunakan endpoint ini.
case "buyresellerpanelv2": {
if (m.isGroup) return m.reply("Pembelian panel pterodactyl hanya bisa di dalam private chat");
if (db.users[m.sender].status_deposit) return m.reply("Masih ada transaksi yang belum diselesaikan, ketik *.batalbeli* untuk membatalkan transaksi sebelumnya!");
let us = crypto.randomBytes(4).toString("hex");
let Obj = {};
Obj.harga = 15; // Harga dasar dalam ribuan (misalnya, Rp15.000)
Obj.username = us;
const randomFee = Math.floor(Math.random() * 100) + 1; // Fee acak antara 1-100 rupiah
const amount = Number(Obj.harga) * 1000 + randomFee; // Konversi ke rupiah + fee acak
try {
// Create payment
const get = await axios.get(`https://simpelz.fahriofficial.my.id/api/orkut/createorkutnew?amount=${amount}&merchant=[merchant]&keyorkut=[keyorkut]`);
const response = get.data;
if (!response.status || !response.result.qrImageUrl) return m.reply("Gagal membuat pembayaran, coba lagi nanti!");
const teks3 = `
*乂 INFORMASI PEMBAYARAN*
*• ID :* [merchant]-[keyorkut]
*• Total Pembayaran :* Rp${await toIDR(amount)} (termasuk fee acak Rp${randomFee})
*• Barang :* Admin Panel Pterodactyl
*• Expired :* 5 menit
*Note :*
Total pembayaran telah ditambahkan fee acak untuk verifikasi unik. Qris pembayaran hanya berlaku dalam 5 menit, jika sudah melewati 5 menit pembayaran dinyatakan tidak valid!
Jika pembayaran berhasil bot akan otomatis mengirim notifikasi status pembayaran kamu.
Ketik *.batalbeli* untuk membatalkan
Ketik *.updateqr * untuk memperbarui QR dengan nominal baru
`;
let msgQr = await conn.sendMessage(m.chat, {
footer: `© 2024 ${botname}`,
image: { url: response.result.qrImageUrl },
caption: teks3,
contextInfo: {
mentionedJid: [m.sender],
},
});
db.users[m.sender].status_deposit = true;
db.users[m.sender].saweria = {
msg: msgQr,
chat: m.sender,
idDeposit: `[merchant]-[keyorkut]`,
amount: amount.toString(),
merchant: '[merchant]',
keyorkut: '[keyorkut]',
exp: function () {
setTimeout(async () => {
if (
db.users[m.sender].status_deposit &&
db.users[m.sender].saweria &&
db.users[m.sender].saweria.amount === amount.toString()
) {
await conn.sendMessage(m.chat, { text: "QRIS Pembayaran telah expired!" }, { quoted: msgQr });
await conn.sendMessage(m.chat, { delete: msgQr.key });
db.users[m.sender].status_deposit = false;
delete db.users[m.sender].saweria;
}
}, 300000); // 5 menit
},
};
await db.users[m.sender].saweria.exp();
// Polling function to check payment status
const checkPaymentStatus = async () => {
try {
// Cek status hanya dengan merchant dan keyorkut
const statusCheck = await axios.get(`https://simpelz.fahriofficial.my.id/api/orkut/createorkutnew?merchant=[merchant]&keyorkut=[keyorkut]`);
const statusResponse = statusCheck.data;
if (statusResponse.status && statusResponse.result && statusResponse.result.status) {
const paymentStatus = statusResponse.result.status.status;
const transactionAmount = statusResponse.result.status.transaction.amount;
if (paymentStatus === "success" && transactionAmount === amount) {
db.users[m.sender].status_deposit = false;
await conn.sendMessage(db.users[m.sender].saweria.chat, {
text: `
*PEMBAYARAN BERHASIL DITERIMA ✅*
*• ID :* ${db.users[m.sender].saweria.idDeposit}
*• Total Pembayaran :* Rp${await toIDR(db.users[m.sender].saweria.amount)} (termasuk fee acak Rp${randomFee})
*• Barang :* Admin Panel Pterodactyl
\`Group Reseller Anda Silahkan Minta Add Ke Admin\`
${global.linkreseller}
`,
}, { quoted: db.users[m.sender].saweria.msg });
await conn.sendMessage(db.users[m.sender].saweria.chat, { delete: db.users[m.sender].saweria.msg.key });
delete db.users[m.sender].saweria;
clearInterval(pollingInterval);
} else if (paymentStatus === "expired" || paymentStatus === "failed") {
await conn.sendMessage(db.users[m.sender].saweria.chat, { text: "QRIS Pembayaran telah expired atau gagal!" }, { quoted: db.users[m.sender].saweria.msg });
await conn.sendMessage(db.users[m.sender].saweria.chat, { delete: db.users[m.sender].saweria.msg.key });
db.users[m.sender].status_deposit = false;
delete db.users[m.sender].saweria;
clearInterval(pollingInterval);
}
}
} catch (error) {
console.error("Error checking payment status:", error.message);
errorCounter++;
if (errorCounter > 5) {
clearInterval(pollingInterval);
await conn.sendMessage(db.users[m.sender].saweria.chat, { text: "Gagal memeriksa status pembayaran setelah beberapa percobaan. Silakan coba lagi nanti." });
db.users[m.sender].status_deposit = false;
delete db.users[m.sender].saweria;
}
}
};
let errorCounter = 0;
const pollingInterval = setInterval(checkPaymentStatus, 10000); // Cek setiap 10 detik
// Stop polling after 5 minutes
setTimeout(() => {
clearInterval(pollingInterval);
if (db.users[m.sender].status_deposit) {
conn.sendMessage(db.users[m.sender].saweria.chat, { text: "Pemeriksaan status pembayaran dihentikan karena waktu habis." });
db.users[m.sender].status_deposit = false;
delete db.users[m.sender].saweria;
}
}, 300000); // 5 menit
} catch (error) {
console.error("Error in buyresellerpanel:", error.message);
return m.reply("Terjadi kesalahan saat membuat pembayaran, coba lagi nanti!");
}
break;
}
}
{
"status": true,
"creator": "Fahri - OfficiaL",
"result": {
"qrImageUrl": "https://example.com/qr-image.png",
"amount": 15001
}
}
{
"status": true,
"creator": "Fahri - OfficiaL",
"result": {
"status": {
"status": "pending",
"transaction": {
"amount": 15001,
"merchant": "[merchant]",
"keyorkut": "[keyorkut]",
"createdAt": 1623456789000
}
}
}
}
amount wajib menyertakan fee acak (Rp1-100) untuk verifikasi unik
pending akan dihapus dari server