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.
Aplikasi Anda mengirim request POST /api/v1/payment/create membawa nominal, order ID, dan customer.
payments.puden.app menyimpan transaksi ke database, meminta Snap Token ke Midtrans, dan mereturn checkout URL.
Customer diarahkan ke checkout page atau Snap modal untuk membayar via QRIS (BCA, GoPay, ShopeePay), VA Bank, atau Kartu.
Midtrans mengirim webhook ke Hub → Hub memverifikasi signature → Hub mengirim signed callback ke website Anda!
Kirim request HTTP POST dari server aplikasi Anda ke endpoint di bawah ini. Anda dapat mengotentikasi menggunakan Authorization: Bearer YOUR_API_KEY.
{
"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
}
]
}
<?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');
}
?>
{
"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"
}
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.
<?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']);
?>
| 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 |