Dokumentasi API Pembayaran QRIS

Endpoint: /api/orkut/createorkutnew

Dibuat oleh: Fahri - OfficiaL

Deskripsi

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.

  • Setiap transaksi menggunakan nominal dengan fee acak untuk verifikasi unik
  • Notifikasi Telegram dikirim untuk setiap pembuatan atau pembaruan QR
  • Integrasi dengan bot WhatsApp untuk proses pembelian otomatis

Detail Endpoint

GET
https://simpelz.fahriofficial.my.id/api/orkut/createorkutnew
Autentikasi

Memerlukan kunci API valid sebagai parameter query.

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

Respon API

Pembuatan QR Baru

Dikembalikan saat membuat atau memperbarui QR:

{
  "status": true,
  "creator": "Fahri - OfficiaL",
  "result": {
    "qrImageUrl": "https://example.com/qr-image.png",
    "amount": 15001,
    "expiredAt": 1623456789000
  }
}

Pengecekan Status

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
      }
    }
  }
}

Error

Dikembalikan saat terjadi kesalahan:

{
  "error": "Parameter merchant dan keyorkut wajib diisi."
}

Fungsi Endpoint

Membuat QR Baru

Membuat QRIS baru jika tidak ada transaksi sebelumnya atau status bukan pending. Memerlukan amount dengan fee acak dan codeqr.

Memperbarui QR

Memperbarui QR untuk transaksi pending dengan amount (termasuk fee acak) dan codeqr baru.

Mengecek Status

Memeriksa status transaksi hanya dengan merchant dan keyorkut.

Notifikasi Telegram

Mengirim notifikasi ke Telegram saat QR dibuat atau diperbarui.

Kode Bot WhatsApp

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;
                  }
}

Contoh Penggunaan API

1. Membuat QR Baru

Request (dengan fee acak):
GET https://simpelz.fahriofficial.my.id/api/orkut/createorkutnew?amount=15001&merchant=[merchant]&keyorkut=[keyorkut]
Respon:
{
  "status": true,
  "creator": "Fahri - OfficiaL",
  "result": {
    "qrImageUrl": "https://example.com/qr-image.png",
    "amount": 15001
  }
}

2. Mengecek Status

Request:
GET https://simpelz.fahriofficial.my.id/api/orkut/createorkutnew?merchant=[merchant]&keyorkut=[keyorkut]
Respon:
{
  "status": true,
  "creator": "Fahri - OfficiaL",
  "result": {
    "status": {
      "status": "pending",
      "transaction": {
        "amount": 15001,
        "merchant": "[merchant]",
        "keyorkut": "[keyorkut]",
        "createdAt": 1623456789000
      }
    }
  }
}

Catatan Penting