Universal Payment Gateway Aggregator

Satu Hub Pembayaran untuk Semua Website & Aplikasi Anda

Hubungkan website Anda (e.g. Absen, Catat, Store, Franz Decor) ke Midtrans, QRIS, Virtual Account, dan E-Wallet secara terpusat dengan keamanan standar enterprise dan performa tinggi.

Mulai Integrasi → Buka Admin Panel

Alur Kerja Pembayaran (Architecture Flow)

1 🌐
Website Klien Minta Bayar

Aplikasi Anda mengirim request POST /api/v1/payment/create membawa nominal, order ID, dan customer.

2 🛡️
Hub Catat & Siapkan Gateway

payments.puden.app menyimpan transaksi ke database, meminta Snap Token ke Midtrans, dan mereturn checkout URL.

3 💳
Customer Bayar

Customer diarahkan ke checkout page atau Snap modal untuk membayar via QRIS (BCA, GoPay, ShopeePay), VA Bank, atau Kartu.

4 ⚡
Notifikasi Real-time & Callback

Midtrans mengirim webhook ke Hub → Hub memverifikasi signature → Hub mengirim signed callback ke website Anda!

1. Membuat Permintaan Pembayaran (API Integration)

Kirim request HTTP POST dari server aplikasi Anda ke endpoint di bawah ini. Anda dapat mengotentikasi menggunakan Authorization: Bearer YOUR_API_KEY.

POST https://payments.puden.app/api/v1/payment/create JSON
{
  "merchant_order_id": "INV-2026-9001",
  "amount": 150000,
  "currency": "IDR",
  "customer_name": "John Doe",
  "customer_email": "[email protected]",
  "customer_phone": "081234567890",
  "callback_url": "https://yourapp.puden.app/api/webhook-payment",
  "return_url": "https://yourapp.puden.app/order-finish?id=INV-2026-9001",
  "item_details": [
    {
      "id": "ITEM-1",
      "name": "Jasa Pembuatan Website",
      "price": 150000,
      "quantity": 1
    }
  ]
}

Contoh Kode PHP (cURL) untuk Website Anda:

<?php
$apiKey = 'YOUR_MERCHANT_API_KEY'; // Dapatkan di dashboard /admin

$payload = [
    'merchant_order_id' => 'ORDER-' . time(),
    'amount'            => 150000,
    'currency'          => 'IDR',
    'customer_name'     => 'Budi Santoso',
    'customer_email'    => '[email protected]',
    'customer_phone'    => '08123456789',
    'callback_url'      => 'https://mywebsite.com/api/payment-callback.php',
    'return_url'        => 'https://mywebsite.com/thankyou.php',
];

$ch = curl_init('https://payments.puden.app/api/v1/payment/create');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_HTTPHEADER     => [
        'Content-Type: application/json',
        'Authorization: Bearer ' . $apiKey,
    ],
    CURLOPT_RETURNTRANSFER => true,
]);

$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);

if (!empty($result['success'])) {
    // Alihkan customer ke halaman checkout pembayaran
    header('Location: ' . $result['checkout_url']);
    exit;
} else {
    echo "Gagal membuat pembayaran: " . ($result['error'] ?? 'Unknown error');
}
?>

Contoh Response JSON dari payments.puden.app:

{
  "success": true,
  "reference": "PAY-20260927-4B2E99A1",
  "merchant_order_id": "ORDER-1758970000",
  "amount": 150000,
  "currency": "IDR",
  "status": "pending",
  "gateway": "midtrans",
  "snap_token": "a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "checkout_url": "https://payments.puden.app/checkout/PAY-20260927-4B2E99A1",
  "snap_redirect_url": "https://app.sandbox.midtrans.com/snap/v2/vtweb/...",
  "expires_at": "2026-09-28 19:50:00"
}

2. Menerima Callback Webhook di Website Anda

Ketika customer menyelesaikan pembayaran di Midtrans, payments.puden.app akan mengirim HTTP POST ke callback_url aplikasi Anda. Permintaan ditandatangani dengan HMAC-SHA256 menggunakan Secret Key aplikasi Anda di header X-Puden-Signature.

Contoh Kode Verifikasi di Website Anda (payment-callback.php):

<?php
$merchantSecretKey = 'YOUR_MERCHANT_SECRET_KEY'; // dari /admin

$rawBody = file_get_contents('php://input');
$signatureHeader = $_SERVER['HTTP_X_PUDEN_SIGNATURE'] ?? '';

// Verifikasi integritas tanda tangan HMAC-SHA256
$expectedSignature = hash_hmac('sha256', $rawBody, $merchantSecretKey);

if (!hash_equals($expectedSignature, $signatureHeader)) {
    http_response_code(401);
    exit('Invalid signature. Request rejected.');
}

// Signature valid! Baca data transaksi
$payload = json_decode($rawBody, true);
$event = $payload['event'] ?? '';
$data  = $payload['data'] ?? [];

$merchantOrderId = $data['merchant_order_id'] ?? null;
$status          = $data['status'] ?? '';
$isPaid          = !empty($data['is_paid']);

if ($isPaid) {
    // 1. Update status pesanan di database website Anda menjadi 'PAID'
    // 2. Berikan akses produk / layanan ke customer
    // 3. Kirim invoice / email notifikasi
}

// Beri response 200 OK ke payments.puden.app
http_response_code(200);
echo json_encode(['status' => 'acknowledged']);
?>

3. Ringkasan API Endpoints

Metode Endpoint Deskripsi Autentikasi
POST /api/v1/payment/create Membuat sesi transaksi baru dan mendapatkan checkout URL Bearer API Key / HMAC
GET /api/v1/payment/status/{reference} Cek status terkini transaksi pembayaran Publik / Bearer
GET /api/v1/payment/list Mendapatkan riwayat pembayaran aplikasi merchant (paginated) Bearer API Key
POST /api/v1/payment/cancel/{reference} Membatalkan pembayaran yang masih pending Bearer API Key
GET /checkout/{reference} Halaman pembayaran customer (QRIS, VA, E-Wallet) Publik
POST /webhook/midtrans IPN Notification Webhook Midtrans Midtrans Signature