AutoGoPay
Login

Dokumentasi API

Dokumentasi lengkap API AutoGoPay. Generate QRIS dinamis, monitoring real-time, dan webhook otomatis.

Base URL
https://api-autogopay.source.web.id

Autentikasi

Semua request memerlukan API Key via header Authorization dengan format Bearer Token.

http
Authorization: Bearer your_api_key_here

Daftar Transaksi

Ambil daftar transaksi terbaru.

POST/transactions
cURL Example
bash
curl -X POST https://api-autogopay.source.web.id/transactions \
  -H "Authorization: Bearer YOUR_API_KEY"
response
{
  "success": true,
  "data": {
    "transactions": [
      {
        "id": "TRX-001",
        "time": "2024-03-18 15:16:33",
        "amount": 50000,
        "currency": "IDR",
        "payment_type": "qris",
        "status": "settlement",
        "issuer": "gopay"
      }
    ]
  }
}

Generate QRIS

Buat transaksi QRIS baru. Order ID di-generate otomatis. Response termasuk checkout_url yang bisa dikirim ke pelanggan sebagai link pembayaran.

POST/qris/generate
cURL Example
bash
curl -X POST https://api-autogopay.source.web.id/qris/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "amount": 10000
}'
Parameter
amountintegerwajibJumlah dalam IDR (1 - 10.000.000)
response
{
  "success": true,
  "message": "QRIS created successfully",
  "data": {
    "transaction_id": "53bc6ed2-441d-4bd0-bc39-11fdfff5fedb",
    "order_id": "AUTOGOPAY-1774618440-2411",
    "amount": 10000,
    "transaction_status": "pending",
    "qr_string": "00020101021226610014COM.GO-JEK.WWW...",
    "qr_url": "https://api-autogopay.source.web.id/qris/53bc6ed2-441d-4bd0-bc39-11fdfff5fedb/qr-code",
    "checkout_url": "https://autogopay.source.web.id/pay/abc123def456",
    "transaction_time": "2026-03-27 20:34:00",
    "expiry_time": "2026-03-27 20:49:00"
  }
}

checkout_url

URL ini bisa langsung dikirim ke pelanggan (via WhatsApp, email, dll). Pelanggan tinggal klik dan scan QRIS di halaman pembayaran. Status akan otomatis update saat pembayaran berhasil.

Payment Link (Checkout URL)

Setiap Generate QRIS otomatis membuat payment link (checkout_url). Link ini adalah halaman pembayaran yang bisa dibagikan ke pelanggan. Status di halaman ini akan otomatis update secara real-time saat transaksi dibayar.

Cara Kerja
  1. Panggil POST /qris/generate dengan amount
  2. Ambil checkout_url dari response
  3. Kirim URL tersebut ke pelanggan (WA, email, chat, dll)
  4. Pelanggan buka link, scan QR, dan bayar
  5. Halaman otomatis menampilkan status berhasil
Format URLhttps://autogopay.source.web.id/pay/<token>

Token di-generate otomatis dan unik per transaksi.

Fitur Halaman Pembayaran
  • Tampilan QR code yang langsung bisa di-scan
  • Countdown timer expiry
  • Auto-detect pembayaran (polling setiap 3 detik)
  • Tampilan berubah otomatis saat berhasil/expired/dibatalkan
  • Responsive (mobile & desktop)

Status Transaksi

Cek status pembayaran QRIS.

POST/qris/status
cURL Example
bash
curl -X POST https://api-autogopay.source.web.id/qris/status \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "transaction_id": "your_transaction_id"
}'
Nilai Status
pendingsettlementexpirecancel

Cancel QRIS

Batalkan transaksi QRIS yang masih pending.

POST/qris/cancel
cURL Example
bash
curl -X POST https://api-autogopay.source.web.id/qris/cancel \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "transaction_id": "your_transaction_id"
}'

Webhook Callback

Terima notifikasi real-time saat transaksi dibayar. Sistem mengirim POST request ke URL webhook Anda.

⚠️ VERIFIKASI SIGNATURE WAJIB

Verifikasi header X-Signature di setiap webhook request menggunakan HMAC-SHA256 dengan API Key sebagai secret.

Header Webhook
Content-Typeapplication/json
User-AgentAutoGopay-Callback/1.0
X-Callback-Eventtransaction.received
X-SignatureHMAC-SHA256 signature
payload
{
  "event": "transaction.received",
  "timestamp": "2024-03-29 14:30:45",
  "transaction": {
    "id": "TRX-001",
    "time": "2024-03-29 14:30:40",
    "amount": 50000,
    "currency": "IDR",
    "payment_type": "qris",
    "status": "settlement",
    "issuer": "gopay"
  }
}
Contoh Implementasi
php
<?php
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_SIGNATURE'] ?? '';
$apiKey = 'your_api_key_here';

// Verify signature (REQUIRED!)
$expected = hash_hmac('sha256', $payload, $apiKey);
if (!hash_equals($expected, $signature)) {
    http_response_code(401);
    exit('Invalid signature');
}

$data = json_decode($payload, true);
if ($data['event'] === 'transaction.received') {
    $tx = $data['transaction'];
    // Process payment: $tx['id'], $tx['amount'], $tx['status']
}

echo json_encode(['success' => true]);
node.js
const crypto = require('crypto');
app.post('/webhook', (req, res) => {
  const signature = req.headers['x-signature'];
  const expected = crypto.createHmac('sha256', API_KEY)
    .update(JSON.stringify(req.body)).digest('hex');
  
  if (signature !== expected) return res.status(401).end();
  
  const { transaction } = req.body;
  if (transaction.status === 'settlement') {
    // Process payment
  }
  res.json({ success: true });
});
Catatan
  • HTTPS wajib di production
  • Return HTTP 200 dalam 10 detik
  • Cek idempotency untuk mencegah duplikat

OVO - Riwayat Transaksi

Ambil riwayat transaksi OVO (masuk & keluar). Akun OVO harus terhubung via dashboard.

GET/ovo/transactions?page=1&limit=10
cURL Example
bash
curl -X GET https://api-autogopay.source.web.id/ovo/transactions?page=1&limit=10 \
  -H "Authorization: Bearer YOUR_API_KEY"
Parameter
pageintegerdefault: 1Halaman
limitintegerdefault: 10Jumlah per halaman (max 50)
response
{
  "success": true,
  "message": "Transaction history retrieved",
  "data": [
    {
      "description": "Top Up",
      "source": "Bank CIMB",
      "amount": 10000,
      "fee": 2000,
      "date": "2026-05-19",
      "time": "20:54:34",
      "status": "SUCCESS",
      "type": "in"
    },
    {
      "description": "Pembayaran",
      "source": "Axis",
      "amount": 1100,
      "fee": 0,
      "date": "2026-05-05",
      "time": "20:47:42",
      "status": "SUCCESS",
      "type": "out"
    }
  ]
}
Field Response
type"in" (masuk) atau "out" (keluar)
sourceSumber transaksi
amountJumlah (IDR)
feeBiaya transaksi
statusSUCCESS / PENDING

OVO - Preview QRIS

Scan QRIS dan dapatkan info merchant + nominal sebelum membayar. Gunakan endpoint ini untuk konfirmasi dulu sebelum lanjut bayar via /ovo/qris/confirm.

POST/ovo/qris/preview
cURL Example
bash
curl -X POST https://api-autogopay.source.web.id/ovo/qris/preview \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "qr_string": "00020101021226...",
  "amount": 5000
}'
Parameter
qr_stringstringwajibString QRIS dari hasil scan QR code
amountintegeropsionalNominal bayar. Opsional, sistem otomatis detect dari QR. Kirim jika ingin override.
Response - Amount Terdeteksi
response
{
  "success": true,
  "message": "QRIS preview ready. Confirm to proceed with payment.",
  "data": {
    "checkout_id": "ck_abc123",
    "scan_id": "sc_xyz789",
    "qr_type": "dynamic",
    "is_dynamic": true,
    "merchant_name": "TOKO SEJAHTERA",
    "merchant_city": "JAKARTA",
    "amount": 50000
  }
}
Response - Static QR Tanpa Nominal
response
{
  "success": true,
  "message": "QRIS preview ready. Amount required for payment.",
  "data": {
    "preview_id": "pending_sc_xyz789",
    "scan_id": "sc_xyz789",
    "qr_type": "static",
    "is_dynamic": false,
    "merchant_name": "WARUNG MAKAN",
    "merchant_city": "BANDUNG",
    "amount": 0,
    "amount_required": true,
    "message": "Static QRIS without embedded amount. Please provide 'amount' in confirm request."
  }
}

💡 Flow 2 Tahap

  • Jika response ada checkout_id → lanjut ke /ovo/qris/confirm dengan checkout_id + pin
  • Jika response ada preview_id + amount_required: true → lanjut ke /ovo/qris/confirm dengan preview_id + amount + pin

OVO - Konfirmasi Bayar QRIS

Konfirmasi dan eksekusi pembayaran QRIS setelah user mereview data dari preview. Ada 2 flow tergantung response preview.

Flow 1: Amount Sudah Terdeteksi
cURL Example
bash
curl -X POST https://api-autogopay.source.web.id/ovo/qris/confirm \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "checkout_id": "ck_abc123",
  "pin": "123456"
}'
Flow 2: Static QR Tanpa Nominal (pakai preview_id)
cURL Example
bash
curl -X POST https://api-autogopay.source.web.id/ovo/qris/confirm \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "preview_id": "pending_sc_xyz789",
  "amount": 25000,
  "pin": "123456"
}'
Parameter
checkout_idstringkondisionalDari response preview (jika amount terdeteksi)
preview_idstringkondisionalDari response preview (jika amount_required: true)
amountintegerkondisionalWajib jika pakai preview_id (nominal yang ingin dibayar)
pinstringwajibPIN OVO 6 digit
response
{
  "success": true,
  "message": "QRIS payment successful",
  "data": {
    "amount": 50000,
    "checkout_id": "ck_abc123"
  }
}
Response - Saldo Tidak Cukup
response
{
  "success": false,
  "message": "Insufficient OVO Cash balance",
  "data": {
    "ovo_cash_balance": 15000,
    "amount_required": 50000,
    "shortage": 35000
  }
}

⚠️ Catatan

  • Kirim checkout_id ATAU preview_id, tidak keduanya
  • checkout_id / preview_id berlaku 10 menit setelah preview
  • Sistem otomatis cek saldo sebelum bayar, jika kurang akan ditolak
  • PIN salah 3x bisa menyebabkan akun OVO terkunci

OVO - Daftar Bank

Ambil daftar bank yang didukung untuk transfer via OVO. Fitur ini harus di-enable oleh admin.

GET/ovo/banks
cURL Example
bash
curl -X GET https://api-autogopay.source.web.id/ovo/banks \
  -H "Authorization: Bearer YOUR_API_KEY"
response
{
  "success": true,
  "message": "Bank list retrieved",
  "data": [
    {
      "code": "014",
      "name": "BANK BCA"
    },
    {
      "code": "002",
      "name": "BANK BRI"
    },
    {
      "code": "008",
      "name": "BANK MANDIRI"
    },
    {
      "code": "009",
      "name": "BANK BNI"
    },
    {
      "code": "022",
      "name": "BANK CIMB NIAGA"
    }
  ]
}

OVO - Transfer Inquiry

Cek nama penerima dan biaya admin sebelum transfer. Panggil ini dulu sebelum eksekusi transfer.

POST/ovo/transfer/inquiry
cURL Example
bash
curl -X POST https://api-autogopay.source.web.id/ovo/transfer/inquiry \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "bank_code": "008",
  "account_number": "1234567890",
  "amount": 10000
}'
Parameter
bank_codestringwajibKode bank dari /ovo/banks
account_numberstringwajibNomor rekening tujuan
amountintegerwajibNominal transfer (min Rp 10.000)
response
{
  "success": true,
  "message": "Bank inquiry successful",
  "data": {
    "bank_code": "008",
    "account_number": "1770025694909",
    "account_name": "AG** AZ**R M* LU**I",
    "amount": 10000,
    "admin_fee": 2500,
    "total_amount": 12500
  }
}

OVO - Transfer Bank

Eksekusi transfer bank. Pastikan sudah melakukan inquiry terlebih dahulu untuk verifikasi nama penerima.

POST/ovo/transfer/execute
cURL Example
bash
curl -X POST https://api-autogopay.source.web.id/ovo/transfer/execute \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "bank_code": "008",
  "bank_name": "BANK MANDIRI",
  "account_number": "1770025694909",
  "account_name": "NAMA PENERIMA",
  "amount": 10000,
  "pin": "123456",
  "notes": "pembayaran"
}'
Parameter
bank_codestringwajibKode bank
bank_namestringopsionalNama bank (auto-detect dari inquiry)
account_numberstringwajibNomor rekening tujuan
account_namestringopsionalNama penerima (auto-detect dari inquiry)
amountintegerwajibNominal transfer (min Rp 10.000)
pinstringwajibPIN OVO 6 digit
notesstringopsionalCatatan transfer
response
{
  "success": true,
  "message": "Transfer successful",
  "data": {
    "amount": 10000,
    "admin_fee": 2500,
    "total_amount": 12500,
    "bank_code": "008",
    "bank_name": "BANK MANDIRI",
    "account_number": "1770025694909",
    "account_name": "AGIN AZHAR MH LUTPI",
    "reference_id": "p01-260613-c2f2b39d-92e7-4382-8cd9-6d44409f1ddc"
  }
}
Response - Saldo Tidak Cukup
response
{
  "success": false,
  "message": "Insufficient OVO Cash balance",
  "data": {
    "ovo_cash_balance": 5000,
    "amount": 10000,
    "admin_fee": 2500,
    "total_required": 12500,
    "shortage": 7500
  }
}

⚠️ Catatan Penting

  • Fitur ini harus di-enable oleh admin terlebih dahulu
  • Minimal transfer Rp 10.000
  • Admin fee Rp 2.500 dicharge otomatis dari saldo OVO
  • Selalu panggil /inquiry dulu untuk verifikasi nama penerima
  • PIN salah 3x bisa menyebabkan akun OVO terkunci

💡 Flow yang Disarankan

  1. GET /ovo/banks → ambil kode bank
  2. POST /ovo/transfer/inquiry → cek nama penerima + fee
  3. Konfirmasi ke user (tampilkan nama + total)
  4. POST /ovo/transfer/execute → eksekusi transfer

ShopeePay - Status

Cek status koneksi ShopeePay dan validitas token. Sistem juga otomatis mengecek token setiap 5 menit dan akan mengirim notifikasi Telegram jika token expired.

GET/shopeepay/status
cURL Example
bash
curl -X GET https://api-autogopay.source.web.id/shopeepay/status \
  -H "Authorization: Bearer YOUR_API_KEY"
response
{
  "success": true,
  "message": "ShopeePay status",
  "data": {
    "connected": true,
    "token_valid": true
  }
}
Field Response
connectedApakah token tersimpan
token_validApakah token masih bisa dipakai (test call ke Shopee API)

⚠️ Auto Token Check

Sistem otomatis mengecek token setiap 5 menit. Jika token invalid/expired, notifikasi akan dikirim ke Telegram kamu (1x sampai token diupdate).

ShopeePay - Transaksi

Ambil daftar transaksi ShopeePay merchant. Default: 3 hari terakhir.

GET/shopeepay/transactions?pageSize=10
cURL Example
bash
curl -X GET https://api-autogopay.source.web.id/shopeepay/transactions?pageSize=10 \
  -H "Authorization: Bearer YOUR_API_KEY"
Parameter (Query)
startTimeunix timestampdefault: 3 hari laluWaktu mulai
endTimeunix timestampdefault: sekarangWaktu akhir
pageSizeintegerdefault: 10Jumlah per halaman
response
{
  "success": true,
  "message": "Transactions retrieved",
  "data": {
    "transactions": [
      {
        "amount": 100,
        "status": "success",
        "issuer": "Bank Mandiri",
        "time": "2026-06-10 23:21:44"
      },
      {
        "amount": 100,
        "status": "success",
        "issuer": "Bank Mandiri",
        "time": "2026-06-10 23:19:52"
      }
    ]
  }
}
Status Transaksi
pendingsuccessfailedrefundedexpired

ShopeePay - Generate QRIS

Generate QRIS dinamis dari static QRIS merchant. QR URL valid 15 menit, otomatis dihapus setelah expired.

POST/shopeepay/qris/create
cURL Example
bash
curl -X POST https://api-autogopay.source.web.id/shopeepay/qris/create \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "amount": 50000,
  "qris_static": "00020101021226..."
}'
Parameter
amountintegerwajibNominal dalam IDR
qris_staticstringwajibString QRIS statis dari sticker QR merchant
response
{
  "success": true,
  "message": "QRIS created successfully",
  "data": {
    "amount": 50000,
    "qr_string": "00020101021126610016ID.CO.SHOPEE.WWW...",
    "qr_url": "https://api-autogopay.source.web.id/shopeepay/qr/6ff2cd1d04c5e4e7",
    "transaction_time": "2026-06-11 14:30:00",
    "expiry_time": "2026-06-11 14:45:00"
  }
}
Field Response
qr_urlURL QR image (redirect ke gambar QR). Expired otomatis setelah 15 menit.
qr_stringRaw QRIS string untuk render sendiri
expiry_timeWaktu QR expired (WIB). Setelah ini qr_url return 404.

ShopeePay - Contoh Bot Payment

Contoh implementasi bot pembayaran otomatis menggunakan ShopeePay QRIS. Bot membuat QRIS dengan nominal unik, lalu polling transaksi untuk deteksi pembayaran.

Alur Kerja
  1. Buat QRIS dengan nominal dasar + angka acak (1-99) supaya unik
  2. Tampilkan QR ke pelanggan
  3. Polling GET /shopeepay/transactions setiap 5 detik
  4. Jika ada transaksi dengan nominal cocok & status "success" = pembayaran berhasil
Node.js
javascript
/**
 * ShopeePay Payment Bot - Node.js
 */

const API_URL = 'https://api-autogopay.source.web.id';
const API_KEY = 'agp_API_KEY_KAMU';
const QRIS_STATIC = '00020101021126610016ID.CO.SHOPEE.WWW...'; // QRIS static merchant kamu

const headers = {
  'Content-Type': 'application/json',
  'Authorization': `Bearer ${API_KEY}`,
};

// Buat nominal unik (nominal dasar + acak 1-99)
function buatNominalUnik(nominalDasar) {
  const acak = Math.floor(Math.random() * 99) + 1;
  return nominalDasar + acak;
}

// Langkah 1: Buat QRIS
async function buatQRIS(nominal) {
  const res = await fetch(`${API_URL}/shopeepay/qris/create`, {
    method: 'POST',
    headers,
    body: JSON.stringify({ amount: nominal, qris_static: QRIS_STATIC }),
  });
  const data = await res.json();
  if (!data.success) throw new Error(data.message);
  return data.data;
}

// Langkah 2: Cek transaksi apakah ada yang cocok
async function cekPembayaran(nominal, waktuMulai) {
  const params = new URLSearchParams({
    pageSize: '20',
    startTime: String(waktuMulai),
  });
  const res = await fetch(`${API_URL}/shopeepay/transactions?${params}`, {
    headers,
  });
  const data = await res.json();
  if (!data.success) return null;

  const transaksi = data.data?.transactions || [];
  const cocok = transaksi.find(
    tx => tx.amount === nominal && tx.status === 'success'
  );
  return cocok || null;
}

// Utama: Buat pembayaran dan tunggu konfirmasi
async function buatPembayaran(nominalDasar) {
  const nominalUnik = buatNominalUnik(nominalDasar);
  const waktuMulai = Math.floor(Date.now() / 1000) - 60;

  console.log(`Membuat QRIS untuk Rp ${nominalUnik}...`);
  const qris = await buatQRIS(nominalUnik);

  console.log(`URL QR: ${qris.qr_url}`);
  console.log(`Nominal: Rp ${qris.amount}`);
  console.log(`Kedaluwarsa: ${qris.expiry_time}`);
  console.log('Menunggu pembayaran...');

  // Cek setiap 5 detik selama 15 menit
  const maksPercobaan = 180;
  for (let i = 0; i < maksPercobaan; i++) {
    await new Promise(r => setTimeout(r, 5000));
    const pembayaran = await cekPembayaran(nominalUnik, waktuMulai);
    if (pembayaran) {
      console.log('PEMBAYARAN BERHASIL!');
      console.log(`  Nominal: Rp ${pembayaran.amount}`);
      console.log(`  Penerbit: ${pembayaran.issuer}`);
      return { sukses: true, pembayaran };
    }
    process.stdout.write(`  Mengecek... (${i + 1}/${maksPercobaan})\r`);
  }

  console.log('Pembayaran kedaluwarsa');
  return { sukses: false };
}

// Jalankan
buatPembayaran(10000).then(hasil => {
  console.log('\nHasil:', JSON.stringify(hasil, null, 2));
});
Python
python
"""
ShopeePay Payment Bot - Python
"""

import requests
import time
import random

API_URL = "https://api-autogopay.source.web.id"
API_KEY = "agp_API_KEY_KAMU"
QRIS_STATIC = "00020101021126610016ID.CO.SHOPEE.WWW..."  # QRIS static merchant kamu

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {API_KEY}",
}


def buat_nominal_unik(nominal_dasar: int) -> int:
    """Buat nominal unik = dasar + acak 1-99"""
    return nominal_dasar + random.randint(1, 99)


def buat_qris(nominal: int) -> dict:
    """Langkah 1: Buat QRIS dengan nominal unik"""
    res = requests.post(
        f"{API_URL}/shopeepay/qris/create",
        headers=headers,
        json={"amount": nominal, "qris_static": QRIS_STATIC},
    )
    data = res.json()
    if not data.get("success"):
        raise Exception(data.get("message", "Gagal membuat QRIS"))
    return data["data"]


def cek_pembayaran(nominal: int, waktu_mulai: int) -> dict | None:
    """Langkah 2: Cek daftar transaksi, cari nominal yang cocok"""
    res = requests.get(
        f"{API_URL}/shopeepay/transactions",
        headers=headers,
        params={"pageSize": 20, "startTime": waktu_mulai},
    )
    data = res.json()
    if not data.get("success"):
        return None

    transaksi = data.get("data", {}).get("transactions") or []
    for tx in transaksi:
        if tx["amount"] == nominal and tx["status"] == "success":
            return tx
    return None


def buat_pembayaran(nominal_dasar: int) -> dict:
    """Utama: Buat pembayaran dan tunggu konfirmasi"""
    nominal_unik = buat_nominal_unik(nominal_dasar)
    waktu_mulai = int(time.time()) - 60

    print(f"Membuat QRIS untuk Rp {nominal_unik}...")
    qris = buat_qris(nominal_unik)

    print(f"URL QR: {qris['qr_url']}")
    print(f"Nominal: Rp {qris['amount']}")
    print(f"Kedaluwarsa: {qris['expiry_time']}")
    print("Menunggu pembayaran...")

    # Cek setiap 5 detik selama 15 menit
    maks_percobaan = 180
    for i in range(maks_percobaan):
        time.sleep(5)
        pembayaran = cek_pembayaran(nominal_unik, waktu_mulai)
        if pembayaran:
            print("\nPEMBAYARAN BERHASIL!")
            print(f"  Nominal: Rp {pembayaran['amount']}")
            print(f"  Penerbit: {pembayaran.get('issuer', '-')}")
            return {"sukses": True, "pembayaran": pembayaran}
        print(f"  Mengecek... ({i + 1}/{maks_percobaan})", end="\r")

    print("\nPembayaran kedaluwarsa")
    return {"sukses": False}


if __name__ == "__main__":
    hasil = buat_pembayaran(10000)
    print(f"\nHasil: {hasil}")

💡 Tips

  • Ganti API_KEY dan QRIS_STATIC dengan milik kamu dari dashboard
  • Nominal unik mencegah konflik jika ada beberapa pembayaran bersamaan
  • Polling 5 detik cukup responsif tanpa membebani server
  • QR expired otomatis setelah 15 menit, sesuaikan loop timeout

© 2026 AutoGoPay. Semua hak dilindungi.