💳 Dokumentasi Payment Gateway Brainxiex

📌 Overview

Payment Gateway Brainxiex adalah sistem pembayaran menggunakan metode QRIS. Sistem ini memungkinkan aplikasi pihak ketiga untuk membuat transaksi pembayaran dan memantau statusnya.

Payment Gateway ini menggunakan QRIS sebagai metode pembayaran utama, yang berarti user dapat membayar menggunakan berbagai aplikasi e-wallet (GoPay, OVO, Dana, ShopeePay, dll) dan mobile banking.

✨ Fitur Utama

QRIS Payment

Pembayaran dengan QRIS yang mendukung berbagai e-wallet dan mobile banking

Auto Expire

Transaksi otomatis kadaluarsa dalam 10 menit jika tidak dibayar

Webhook Notification

Notifikasi otomatis saat pembayaran berhasil

Secure

API Key authentication untuk keamanan transaksi

🌐 Base URL

Base URL untuk mengakses semua endpoint Payment Gateway Brainxiex:

https://brainxiex.com/api/brainxiex

Endpoint yang Tersedia:

Endpoint Method Description
/buat-transaksi POST Membuat transaksi pembayaran baru
/cek-transaksi GET Mengecek status transaksi

🔑 Autentikasi

Semua endpoint Payment Gateway memerlukan API Key untuk autentikasi. API Key dapat disertakan melalui parameter apikey di request body atau query parameter.

Contoh Autentikasi:

{
  "apikey": "YOUR_API_KEY",
  "jumlah": 10000
}
Important: Setiap request yang menggunakan API Key akan mengurangi saldo API Key Anda. Pastikan API Key memiliki saldo yang cukup sebelum melakukan request.

Cara Mendapatkan API Key

API Key dapat diperoleh dengan mengunjungi Dashboard Brainxiex dan membuat API Key baru.

➕ Buat Transaksi

Endpoint ini digunakan untuk membuat transaksi pembayaran baru. Transaksi akan menghasilkan QR code yang dapat dipindai oleh user untuk melakukan pembayaran.

POST /api/brainxiex/buat-transaksi

Request Parameters:

Parameter Type Required Description
apikey string Yes API Key untuk autentikasi
jumlah number Yes Nominal pembayaran (minimal 10.000)
prefix string No Prefix untuk ID transaksi (opsional)
webhook string No URL webhook untuk notifikasi pembayaran
user string No Username user (untuk auto topup)
email string No Email user (untuk verifikasi auto topup)
wa string No Nomor WhatsApp (untuk notifikasi)

Contoh Request:

curl -X POST 'https://brainxiex.com/api/brainxiex/buat-transaksi' \
-H 'Content-Type: application/json' \
-d '{
  "apikey": "YOUR_API_KEY",
  "jumlah": 10000,
  "webhook": "https://your-app.com/webhook",
  "user": "username",
  "email": "[email protected]",
  "wa": "6281234567890"
}'
<?php
$data = array(
  "apikey" => "YOUR_API_KEY",
  "jumlah" => 10000,
  "webhook" => "https://your-app.com/webhook",
  "user" => "username",
  "email" => "[email protected]",
  "wa" => "6281234567890"
);

$options = array(
  "http" => array(
    "header" => "Content-Type: application/json\r\n",
    "method" => "POST",
    "content" => json_encode($data),
  ),
);

$context = stream_context_create($options);
$response = file_get_contents('https://brainxiex.com/api/brainxiex/buat-transaksi', false, $context);
echo $response;
?>
const data = {
  apikey: "YOUR_API_KEY",
  jumlah: 10000,
  webhook: "https://your-app.com/webhook",
  user: "username",
  email: "[email protected]",
  wa: "6281234567890"
};

fetch('https://brainxiex.com/api/brainxiex/buat-transaksi', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(data)
})
.then(response => response.json())
.then(result => console.log(result))
.catch(error => console.error('Error:', error));
const axios = require('axios');

const data = {
  apikey: "YOUR_API_KEY",
  jumlah: 10000,
  webhook: "https://your-app.com/webhook",
  user: "username",
  email: "[email protected]",
  wa: "6281234567890"
};

axios.post('https://brainxiex.com/api/brainxiex/buat-transaksi', data)
.then(response => {
  console.log(response.data);
})
.catch(error => {
  console.error('Error:', error);
});
import requests
import json

url = "https://brainxiex.com/api/brainxiex/buat-transaksi"
headers = {
  "Content-Type": "application/json"
}
data = {
  "apikey": "YOUR_API_KEY",
  "jumlah": 10000,
  "webhook": "https://your-app.com/webhook",
  "user": "username",
  "email": "[email protected]",
  "wa": "6281234567890"
}

response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.json())

Response Success:

{
  "ok": true,
  "id": "abc123xyz",
  "status": "pending",
  "nominal": 10250,
  "biaya_admin": 50,
  "biaya_transaksi": 250,
  "total": 10000,
  "qris_string": "00020101021226580016ID.CO.QRIS.WWW01189360052002100000000000303UMI51440014ID.CO.QRIS.WWW0215ID102002000000000303UMI5204581253033605802ID5910Barqah_Xiex6007Jakarta6105101106304A3B2",
  "qris_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
  "date": 1731234567890,
  "expired": 1731238167890,
  "webhook": "https://your-app.com/webhook",
  "user": "username",
  "email": "[email protected]",
  "wa": "6281234567890"
}

Response Fields:

Field Type Description
ok boolean Status success/failure
id string ID transaksi unik
status string Status transaksi (pending/sukses/expired)
nominal number Nominal total termasuk biaya
biaya_admin number Biaya admin dari payment gateway
biaya_transaksi number Biaya transaksi (2.5%)
total number Nominal yang diterima setelah potongan
qris_string string String QR code untuk pembayaran
qris_image string Base64 image QR code
date number Timestamp pembuatan transaksi
expired number Timestamp kadaluarsa (10 menit)

Response Error:

{
  "ok": false,
  "error": "apikey salah"
}
Error Common: Beberapa error yang mungkin terjadi: "apikey salah", "apikey telah habis saldo", "Tidak ada parameter jumlah", "jumlah is NaN", "jumlah Kurang dari 10000"

🔍 Cek Transaksi

Endpoint ini digunakan untuk mengecek status transaksi berdasarkan ID transaksi.

GET /api/brainxiex/cek-transaksi

Request Parameters:

Parameter Type Required Description
id string Yes ID transaksi yang ingin dicek

Contoh Request:

curl -X GET 'https://brainxiex.com/api/brainxiex/cek-transaksi?id=abc123xyz'
<?php
$id = "abc123xyz";
$response = file_get_contents("https://brainxiex.com/api/brainxiex/cek-transaksi?id=$id");
echo $response;
?>
const id = "abc123xyz";

fetch(`https://brainxiex.com/api/brainxiex/cek-transaksi?id=${id}`)
.then(response => response.json())
.then(result => console.log(result))
.catch(error => console.error('Error:', error));
import requests

id = "abc123xyz"
url = f"https://brainxiex.com/api/brainxiex/cek-transaksi?id={id}"

response = requests.get(url)
print(response.json())

Response Success (Pending):

{
  "ok": true,
  "id": "abc123xyz",
  "status": "pending",
  "nominal": 10250,
  "biaya_admin": 50,
  "biaya_transaksi": 250,
  "total": 10000,
  "qris_string": "...",
  "qris_image": "data:image/png;base64,...",
  "date": 1731234567890,
  "expired": 1731238167890
}

Response Success (Sukses):

{
  "ok": true,
  "id": "abc123xyz",
  "status": "sukses",
  "nominal": 10250,
  "biaya_admin": 50,
  "biaya_transaksi": 250,
  "total": 10000,
  "qris_string": "...",
  "qris_image": "data:image/png;base64,...",
  "date": 1731234567890,
  "expired": 1731238167890
}

Response Success (Expired):

{
  "ok": true,
  "id": "abc123xyz",
  "status": "expired",
  "nominal": 10250,
  "biaya_admin": 50,
  "biaya_transaksi": 250,
  "total": 10000,
  "qris_string": "...",
  "qris_image": "data:image/png;base64,...",
  "date": 1731234567890,
  "expired": 1731238167890
}

Status Transaksi:

pending sukses expired
  • pending: Transaksi menunggu pembayaran
  • sukses: Transaksi berhasil dibayar
  • expired: Transaksi kadaluarsa (10 menit)

Response Error:

{
  "ok": false,
  "error": "data tidak ada"
}

🔔 Webhook

Webhook digunakan untuk menerima notifikasi otomatis ketika pembayaran berhasil. Sistem akan mengirim POST request ke URL webhook yang Anda set saat membuat transaksi.

POST Your Webhook URL
Webhook Security: Pastikan endpoint webhook Anda dapat menerima POST request. Validasi data yang diterima sebelum memprosesnya.

Webhook Payload:

Sistem akan mengirim data berikut ke webhook URL Anda saat pembayaran berhasil:

{
  "ok": true,
  "id": "abc123xyz",
  "status": "sukses",
  "nominal": 10250,
  "biaya_admin": 50,
  "biaya_transaksi": 250,
  "total": 10000,
  "qris_string": "...",
  "qris_image": "data:image/png;base64,...",
  "date": 1731234567890,
  "expired": 1731238167890,
  "webhook": "https://your-app.com/webhook",
  "user": "username",
  "email": "[email protected]",
  "wa": "6281234567890"
}

Implementasi Webhook (Node.js):

const express = require('express');
const app = express();

app.use(express.json());

app.post('/webhook', (req, res) => {
  const { id, status, nominal, user, email } = req.body;

  // Validasi data
  if (!id || !status) {
    return res.status(400).json({ error: 'Invalid payload' });
  }

  // Cek status pembayaran
  if (status === 'sukses') {
    console.log(`Pembayaran sukses: ${id}, Amount: ${nominal}`);

    // Update database, kirim notifikasi, dll
    // Contoh: tambahkan saldo user
    if (user && email) {
      // Verifikasi dan tambahkan saldo
    }
  }

  // Response ke server
  res.status(200).json({ success: true });
});

app.listen(3000, () => {
  console.log('Webhook server running on port 3000');
});
Important: Webhook akan dikirim setiap kali status transaksi berubah. Pastikan handler Anda idempotent (tidak memproses data yang sama dua kali).

🔄 Payment Flow

Berikut adalah alur lengkap pembayaran menggunakan Payment Gateway Brainxiex:

Buat Transaksi

Aplikasi Anda memanggil endpoint /buat-transaksi dengan parameter yang diperlukan (apikey, jumlah, webhook, user, email, dll).

const response = await fetch('https://brainxiex.com/api/brainxiex/buat-transaksi', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    apikey: 'YOUR_API_KEY',
    jumlah: 10000,
    webhook: 'https://your-app.com/webhook',
    user: 'username',
    email: '[email protected]'
  })
});
const transaction = await response.json();

Tampilkan QR Code

Dari response, tampilkan QR code (qris_image) kepada user untuk dipindai menggunakan aplikasi e-wallet atau mobile banking.

<img src="${transaction.qris_image}" alt="QRIS Payment" />

User Scan & Bayar

User memindai QR code menggunakan aplikasi e-wallet (GoPay, OVO, Dana, dll) atau mobile banking dan melakukan pembayaran.

Polling Status (Opsional)

Aplikasi Anda dapat melakukan polling status transaksi setiap beberapa detik menggunakan endpoint /cek-transaksi untuk mengecek apakah pembayaran sudah berhasil.

// Polling setiap 5 detik
const interval = setInterval(async () => {
  const response = await fetch(`https://brainxiex.com/api/brainxiex/cek-transaksi?id=${transaction.id}`);
  const status = await response.json();

  if (status.status === 'sukses') {
    clearInterval(interval);
    console.log('Pembayaran berhasil!');
    // Proses pembayaran sukses
  } else if (status.status === 'expired') {
    clearInterval(interval);
    console.log('Transaksi kadaluarsa');
    // Handle expired
  }
}, 5000);

Webhook Notification

Saat pembayaran berhasil, sistem akan mengirim POST request ke webhook URL yang Anda set dengan data transaksi lengkap.

Auto Topup (Jika Parameter Terpenuhi)

Jika parameter user dan email disertakan dan cocok dengan database, saldo user akan otomatis ditambahkan setelah pembayaran berhasil.

💰 Biaya

Berikut adalah rincian biaya yang dikenakan untuk setiap transaksi:

Jenis Biaya Persentase Contoh (Rp 10.000)
Biaya Transaksi 2.5% Rp 250
Biaya Admin Bervariasi Rp 50 (contoh)
Total Biaya ~3% Rp 300
Perhitungan: Jika user ingin topup Rp 10.000, nominal yang harus dibayar adalah Rp 10.000 + (2.5% x 10.000) + biaya admin. User akan menerima Rp 10.000 setelah potongan.

Minimal Transaksi:

Minimal nominal transaksi adalah Rp 10.000.

💻 Examples

Contoh Implementasi Lengkap (JavaScript):

class BrainxiexPayment {
  constructor(apikey) {
    this.apikey = apikey;
    this.baseUrl = 'https://brainxiex.com/api/brainxiex';
  }

  // Buat transaksi baru
  async createTransaction(options) {
    const { jumlah, webhook, user, email, wa, prefix } = options;

    const response = await fetch(`${this.baseUrl}/buat-transaksi`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        apikey: this.apikey,
        jumlah,
        webhook,
        user,
        email,
        wa,
        prefix
      })
    });

    return await response.json();
  }

  // Cek status transaksi
  async checkTransaction(id) {
    const response = await fetch(`${this.baseUrl}/cek-transaksi?id=${id}`);
    return await response.json();
  }

  // Polling status sampai sukses atau expired
  async waitForPayment(id, options = {}) {
    const { interval = 5000, maxAttempts = 120 } = options;
    let attempts = 0;

    return new Promise((resolve, reject) => {
      const poll = setInterval(async () => {
        attempts++;

        if (attempts > maxAttempts) {
          clearInterval(poll);
          reject(new Error('Payment timeout'));
          return;
        }

        const status = await this.checkTransaction(id);

        if (status.status === 'sukses') {
          clearInterval(poll);
          resolve(status);
        } else if (status.status === 'expired') {
          clearInterval(poll);
          reject(new Error('Transaction expired'));
        }
      }, interval);
    });
  }
}

// Penggunaan
const payment = new BrainxiexPayment('YOUR_API_KEY');

// Buat transaksi
const transaction = await payment.createTransaction({
  jumlah: 10000,
  webhook: 'https://your-app.com/webhook',
  user: 'username',
  email: '[email protected]'
});

if (transaction.ok) {
  console.log('Transaksi dibuat:', transaction.id);
  console.log('QR Code:', transaction.qris_image);

  // Tampilkan QR code ke user...

  // Tunggu pembayaran (opsional)
  try {
    const result = await payment.waitForPayment(transaction.id);
    console.log('Pembayaran berhasil!', result);
  } catch (error) {
    console.error('Error:', error.message);
  }
} else {
  console.error('Gagal membuat transaksi:', transaction.error);
}

⚠️ Error Handling

Common Errors:

Error Message Cause Solution
apikey salah API Key tidak valid Periksa API Key Anda di dashboard
apikey telah habis saldo Saldo API Key habis Topup saldo API Key
Tidak ada parameter jumlah Parameter jumlah tidak disertakan Sertakan parameter jumlah dalam request
jumlah is NaN Parameter jumlah bukan angka Pastikan parameter jumlah adalah number
jumlah Kurang dari 10000 Nominal kurang dari minimal Gunakan nominal minimal Rp 10.000
data tidak ada ID transaksi tidak ditemukan Periksa ID transaksi yang benar

Best Practices:

  • Selalu validasi response sebelum memproses data
  • Gunakan try-catch untuk menangani error network
  • Implementasi retry logic untuk request yang gagal
  • Simpan log transaksi untuk debugging
  • Set timeout yang wajar untuk polling status
Security: Jangan pernah mengekspos API Key di frontend. Selalu gunakan API Key di server-side saja.

© 2026 Brainxiex Development. All rights reserved.