Webpulsa W38S v3.9.5 (Standar)
ZIP integrasi Gateway Digimana untuk Webpulsa engine W38S tema bawaan/standar.
Download gateway_digimana_w38s_v395.zip SHA-256:b5d5012f3becfcbb02013ae6b179c451d2bcb7ac5a569ca40dfc583f1ae947ba
Base URL
https://gateway.digimana.in/api/v1
Pilih paket sesuai versi Webpulsa W38S yang digunakan. Paket berisi metode pembayaran Gateway Digimana untuk transfer bank dan QRIS. Backup file serta database website sebelum instalasi atau upgrade.
admin/payments/digimanain_gateway; metode transfer_bank lama tidak perlu diaktifkan. Kedua ZIP menyertakan cron HTTP bertoken untuk instalasi berlisensi yang menolak CLI. Di admin/notif_rules, pilih HTTP/cURL, gunakan Channel Key dan Webhook Secret channel aktif, salin perintah cron, dan lihat hasil sinkronisasi terakhir. Pasang jadwal setiap menit di hosting.ZIP integrasi Gateway Digimana untuk Webpulsa engine W38S tema bawaan/standar.
Download gateway_digimana_w38s_v395.zip SHA-256:b5d5012f3becfcbb02013ae6b179c451d2bcb7ac5a569ca40dfc583f1ae947ba
ZIP integrasi Gateway Digimana untuk Webpulsa engine W38S tema bawaan/standar.
Download gateway_digimana_w38s_v396.zip SHA-256:51c08744247077330e47ff0fb1049ca0b98e437ffd8c3f0b8443e24e8826eeec
Khusus tema SFKios (viewsf.php): scoped styling, SVG mandiri, dan Tag 62 alfanumerik bersih.
Download gateway_digimana_v395_sfkios.zip SHA-256:7cbae27286b345a72dddceb03f42a5be9258f4d0c9f0f81624c21b095d604b4d
Khusus tema SFKios (viewsf.php): scoped styling, SVG mandiri, dan Tag 62 alfanumerik bersih.
Download gateway_digimana_v396_sfkios.zip SHA-256:0df0dffa2e4a7c136037891486bf3e4605cfe3416558f55341da26347b5624d2
transfer_bank_qris_395.zip bukan bagian dari rilis Webpulsa W38S ini. Gunakan salah satu paket Gateway Digimana di atas.Android bertugas mengirim mutasi pembayaran. Website/client bertugas membuat reservation, menampilkan instruksi pembayaran, dan memproses webhook. Integrasi channel harus dilakukan dari backend server—bukan JavaScript browser.
ch_live_....whsec_... untuk verifikasi HMAC.X-Channel-Key.qr_data_uri atau rekening beserta total_amount.X-Channel-Key, sedangkan callback diverifikasi menggunakan Webhook Secret.Endpoint aplikasi Android memakai Authorization: Bearer TOKEN. Endpoint website/channel memakai X-Channel-Key. Simpan key di server website, jangan di JavaScript browser atau query string.
Buat pending payment sebelum pelanggan mentransfer. Gateway memberikan nominal unik global sehingga pembayaran hanya dapat diarahkan ke website pemilik reservation.
curl -X POST "https://gateway.digimana.in/api/v1/channels/pending-payment" \
-H "X-Channel-Key: YOUR_CHANNEL_KEY" \
-H "Content-Type: application/json" \
-d '{
"external_reference": "DEP#101",
"amount": 11000,
"payment_method": "qris",
"store_reference": "DIGITU",
"customer_name": "Nama Pelanggan",
"customer_email": "pelanggan@example.com",
"expires_at": 1789970400
}'
DEP#101.qris, bank, atau bank_transfer.true bila amount sudah memuat kode unik dari sistem Anda. Gateway memakai nominal apa adanya (+ fee) dan baru menambah kode unik bila total bentrok dengan tagihan lain.expires_at bersifat opsional dan paling aman dikirim sebagai Unix timestamp. Gateway dapat mempersingkat masa berlaku sesuai batas order sumber, tetapi tidak akan memperpanjang melebihi batas maksimum invoice.
{
"success": true,
"status": "pending",
"external_reference": "DEP#101",
"payment_method": "qris",
"base_amount": 11000,
"fee": 165,
"unique_code": 27,
"total_amount": 11192,
"qr_data_uri": "data:image/png;base64,...",
"dynamic_qris": "000201...",
"expires_at": "2026-09-21 17:00:00"
}
Gunakan total_amount sebagai nominal yang wajib dibayar dan qr_data_uri untuk menampilkan QR. Jangan menghitung ulang fee atau kode unik di website. Untuk QRIS, gateway menyisipkan referensi transaksi ke EMVCo Tag 62 dan menghitung ulang CRC. Referensi serta nominal yang sama bersifat idempoten.
# Polling status sebagai fallback webhook
curl "https://gateway.digimana.in/api/v1/channels/check-payment/DEP%23101" \
-H "X-Channel-Key: YOUR_CHANNEL_KEY"
# Batalkan hanya ketika masih pending
curl -X DELETE "https://gateway.digimana.in/api/v1/channels/pending-payment/DEP%23101" \
-H "X-Channel-Key: YOUR_CHANNEL_KEY"
Webhook adalah jalur utama. Polling dipakai sebagai fallback atau rekonsiliasi, bukan untuk menggantikan callback real-time.
# Rekonsiliasi beberapa order pending
curl -X POST "https://gateway.digimana.in/api/v1/channels/reconcile" \
-H "X-Channel-Key: YOUR_CHANNEL_KEY" \
-H "Content-Type: application/json" \
-d '{"references":["DEP#101","TRX#202"]}'
# Daftar pembayaran yang callback-nya belum diterima website
curl "https://gateway.digimana.in/api/v1/channels/undelivered-payments?hours=24" \
-H "X-Channel-Key: YOUR_CHANNEL_KEY"
Gunakan hanya bila website belum dapat membuat reservation. Ambil mutasi tenant yang belum terpakai, lalu klaim berdasarkan ID gateway.
curl "https://gateway.digimana.in/api/v1/transactions/unclaimed?amount=11490&limit=20" \
-H "X-Channel-Key: YOUR_CHANNEL_KEY"
curl -X POST "https://gateway.digimana.in/api/v1/transactions/claim" \
-H "X-Channel-Key: YOUR_CHANNEL_KEY" \
-H "Idempotency-Key: DEP-101-CLAIM" \
-H "Content-Type: application/json" \
-d '{
"gateway_trx_id": 12345,
"external_reference": "DEP#101"
}'
200. Klaim berbeda terhadap transaksi yang sudah dimiliki menghasilkan 409./status
Memeriksa status gateway dan database.
Publik/auth/register
Membuat akun trial dan menerima token pertama.
Publik/auth/login
Memvalidasi akun dan menerbitkan token baru.
Publik/auth/verify
Memvalidasi token dan mengambil profil serta limit paket.
Bearer token/rules
Mengambil master rule notifikasi aktif.
Bearer token/accounts
Mengambil rekening bank dan QRIS milik pengguna.
Bearer token/devices/register
Mendaftarkan atau memperbarui perangkat Android.
Bearer token/devices/heartbeat
Memperbarui status aktif perangkat.
Bearer token/devices/settings?device_id={device_id}
Mengambil konfigurasi listener perangkat.
Bearer token/devices/{id}/settings
Memperbarui konfigurasi listener perangkat.
Bearer token/transactions
Mengirim satu transaksi hasil parsing notifikasi.
Bearer token/transactions/bulk
Mengirim maksimal 100 transaksi offline sekaligus.
Bearer token/transactions?page=1&per_page=20
Mengambil riwayat transaksi bertahap.
Bearer token/transactions/unclaimed?limit=20
Mengambil mutasi tenant yang belum pernah diklaim. Gunakan hanya untuk integrasi legacy.
X-Channel-Key/transactions/claim
Mengklaim satu mutasi secara atomik dan idempotent.
X-Channel-Key/subscription/status
Mengambil status dan limit paket aktif.
Bearer token/subscription/plans
Mengambil paket dan harga aktif.
Bearer token/channels/health
Memeriksa channel, sumber pembayaran, dan kesiapan integrasi.
X-Channel-Key/channels/pending-payment
Membuat tagihan transfer atau QRIS dinamis.
X-Channel-Key/channels/check-payment/{reference}
Memeriksa status tagihan eksternal.
X-Channel-Key/channels/pending-payment/{reference}
Membatalkan tagihan yang masih pending.
X-Channel-Key/channels/bank-accounts
Mengambil rekening tujuan yang tersedia untuk channel.
X-Channel-Key/channels/redeliver-webhook/{reference}
Mengirim ulang webhook pembayaran untuk satu referensi.
X-Channel-Key/channels/undelivered-payments
Mengambil pembayaran yang webhook-nya belum terkirim atau gagal.
X-Channel-Key/channels/reconcile
Memeriksa status beberapa referensi pembayaran sekaligus.
X-Channel-Key/owner/payment-received
Meneruskan notifikasi pembayaran dari perangkat owner.
Bearer ownerGateway mengirim X-Gateway-Event-Id, X-Gateway-Timestamp, dan X-Gateway-Signature. Hitung HMAC-SHA256 dari {timestamp}.{raw_json_body}, bandingkan secara constant-time, dan tolak timestamp lebih lama dari lima menit.
X-Gateway-Event-Id: evt_abc123
X-Gateway-Timestamp: 1789448400
X-Gateway-Signature: sha256=HMAC_HEX
{
"event": "payment.matched",
"event_id": "evt_abc123",
"data": {
"gateway_trx_id": 12345,
"payment_id": 678,
"external_reference": "DEP#101",
"amount": 11490,
"base_amount": 11000,
"unique_code": 27,
"fee_amount": 463,
"net_amount": 11000,
"status": "paid"
}
}
Simpan event_id atau gateway_trx_id dengan unique index dan proses perubahan status deposit serta saldo dalam satu database transaction. Gunakan net_amount ketika order sumber sudah tidak ada dan pembayaran harus dialihkan ke saldo deposit. Event duplikat harus mengembalikan HTTP 200 tanpa kredit ulang.
// PHP — verifikasi signature dari RAW request body
$raw = file_get_contents('php://input');
$timestamp = $_SERVER['HTTP_X_GATEWAY_TIMESTAMP'] ?? '';
$received = $_SERVER['HTTP_X_GATEWAY_SIGNATURE'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $timestamp . '.' . $raw, WEBHOOK_SECRET);
if (abs(time() - (int) $timestamp) > 300 || !hash_equals($expected, $received)) {
http_response_code(401);
exit('Invalid signature');
}
200 hanya setelah event tersimpan aman. Jika callback gagal, gunakan Webhook Console atau endpoint redelivery/reconciliation tanpa menambah saldo dua kali.hash_equals, dan toleransi maksimal lima menit.Jangan panggil endpoint channel langsung dari browser atau aplikasi publik karena X-Channel-Key dapat dicuri. Browser hanya berkomunikasi dengan backend website milik Anda.