API Produk Single wallet vs transfer wallet
Wallet tunggal vs wallet transfer
Perbandingan teknis dua model wallet yang digunakan untuk menghubungkan saldo pemain operator ke casino game API: siapa yang memegang dana, panggilan apa yang melintasi jaringan saat taruhan, bagaimana kegagalan dipulihkan, dan apa yang harus Anda bangun di sisi Anda.
Sekilas
| Aspek | Single wallet | Transfer wallet |
|---|---|---|
| Kustodian saldo | Database Anda menyimpan satu-satunya saldo. Penyedia tidak pernah menyimpan dana pemain. | Penyedia menyimpan saldo game yang terpisah. Dana masuk dan keluar melalui panggilan transfer. |
| Panggilan saat taruhan | Setiap taruhan dan kemenangan memicu callback server-to-server ke Anda (balance, debit, credit, rollback). | Tidak ada. Game berjalan menggunakan saldo di sisi penyedia. Panggilan hanya terjadi saat transfer masuk dan keluar. |
| Ketersediaan yang dibutuhkan | Endpoint wallet Anda harus menjawab setiap callback, biasanya dalam beberapa ratus milidetik. Jika mati, permainan berhenti. | Hanya diperlukan saat transfer. Ronde tetap berjalan jika sistem Anda offline sebentar. |
| Model konsistensi | Ledger Anda adalah sumber kebenaran real-time. Hanya ronde game yang perlu direkonsiliasi, bukan saldo. | Dua ledger yang hanya cocok pada batas transfer. Memerlukan rekonsiliasi tingkat transfer. |
| Pemulihan kegagalan | Timeout diselesaikan dengan retry idempoten dan panggilan rollback berdasarkan ID transaksi. | Transfer terdiri dari dua fase: pending, lalu berhasil atau gagal. Query status menyelesaikan hasil yang belum diketahui. |
| Upaya integrasi | Lebih tinggi. Anda membangun dan mengoperasikan layanan callback berlatensi rendah dengan idempotensi dan ledger. | Lebih rendah. Anda memanggil tiga atau empat endpoint REST, tanpa trafik masuk yang perlu diamankan atau diskalakan. |
| Pengalaman pemain | Satu saldo, tanpa langkah transfer. Cocok untuk bonus, permainan lintas produk, dan tampilan saldo langsung. | Dana dipindahkan masuk sebelum bermain dan keluar sesudahnya. Menambah jeda singkat dan risiko saldo tertinggal jika pemain pergi di tengah sesi. |
| Kecocokan umum | Operator dengan wallet atau platform sendiri dan kontrol ketat atas dana dan promosi. | Operator yang menginginkan peluncuran cepat atau belum memiliki layanan wallet real-time. |
Single wallet (seamless)
Pada model single wallet (seamless), sistem Anda adalah wallet-nya. Saat pemain memasang taruhan, SSG API memanggil endpoint callback Anda, Anda mengubah saldo di ledger Anda sendiri, lalu menjawab dengan saldo baru. Tidak ada dana yang keluar dari database Anda.
Alur panggilan
- Peluncuran: backend Anda meminta URL game dari SSG dengan ID pemain dan token sesi.
- Taruhan: untuk setiap ronde SSG memanggil debit dengan txId unik. Anda memeriksa dana, menulis baris ledger, dan mengembalikan saldo baru.
- Kemenangan: SSG memanggil credit dengan nilai pembayaran (bisa nol) untuk ronde yang sama.
- Kegagalan: jika panggilan timeout, SSG mencoba ulang dengan txId yang sama, dan setelah batas percobaan ulang tercapai, SSG mengirim rollback.
Metode callback (ilustratif)
| Metode | Tujuan | Field utama | Idempoten |
|---|---|---|---|
balance | Mengembalikan saldo pemain saat ini. | playerId, currency | Ya (hanya baca) |
debit | Memasang taruhan: mengurangi saldo sebesar jumlah taruhan. | playerId, txId, roundId, gameId, amount, currency | Berdasarkan txId |
credit | Menyelesaikan kemenangan: menambah saldo sebesar jumlah kemenangan. | playerId, txId, roundId, amount, currency | Berdasarkan txId |
rollback | Membatalkan debit atau credit sebelumnya setelah terjadi error. | txId, refTxId | Berdasarkan txId |
Contoh request debit
{
"method": "debit",
"playerId": "p_839201",
"txId": "tx_20261007_000184",
"roundId": "r_77f3a1",
"gameId": "slots_fruit_01",
"currency": "MYR",
"amount": "2.50",
"ts": 1791338577,
"sign": "hex(HMAC-SHA256(secret, canonical))"
}Contoh response
{
"status": "OK",
"txId": "tx_20261007_000184",
"balance": "97.50",
"currency": "MYR"
}
// errors: INSUFFICIENT_FUNDS, PLAYER_NOT_FOUND,
// DUPLICATE_TX (return original result), INTERNAL_ERRORAturan yang harus dipatuhi layanan wallet Anda
- Idempotensi
- Debit atau credit berulang dengan txId yang sama harus mengembalikan hasil asli dan tidak boleh memindahkan dana lagi. Pastikan dengan unique index pada txId.
- Penulisan ledger atomik
- Periksa saldo, sisipkan baris ledger, dan perbarui saldo dalam satu transaksi database, sehingga dua taruhan bersamaan tidak pernah bisa menyebabkan saldo minus.
- Rollback sebelum debit
- Rollback dapat tiba untuk txId yang belum pernah Anda terima karena debit aslinya timeout. Simpan tombstone agar debit terlambat dengan txId tersebut ditolak.
- Anggaran latensi
- Targetkan p99 di bawah 500 ms termasuk jaringan. Batasi jalur callback pada satu pembacaan terindeks dan satu penulisan, dan jauhkan query pelaporan dari jalur ini.
- Format nominal
- Perlakukan nominal sebagai string desimal atau satuan terkecil berupa integer. Jangan pernah gunakan floating point, dan validasi mata uang terhadap akun pemain.
- Bonus dan free spin
- Free spin adalah debit senilai 0 yang diikuti credit sebesar kemenangan. Pisahkan saldo promosi dari saldo tunai di ledger Anda.
- Keamanan
- Verifikasi tanda tangan HMAC-SHA256 atas canonical request, tolak timestamp kedaluwarsa, daftarkan IP sumber SSG dalam allowlist, dan wajibkan TLS 1.2 atau lebih tinggi.
- Rekonsiliasi
- Bandingkan laporan round harian dari SSG dengan ledger Anda berdasarkan roundId. Selisih biasanya menunjukkan callback atau rollback yang terlewat.
Transfer wallet
Pada model transfer wallet, provider menyimpan saldo game untuk setiap pemain. Backend Anda memindahkan dana masuk sebelum bermain dan keluar sesudahnya. Selama bermain tidak ada callback ke sistem Anda, sehingga Anda hanya memerlukan panggilan REST outbound.
Alur panggilan
- Transfer masuk: backend Anda memanggil transferIn dengan txId unik dan nominal. Hasilnya PENDING atau SUCCESS.
- Bermain: luncurkan game. Semua taruhan dan kemenangan hanya mengubah saldo di sisi provider tanpa callback ke Anda.
- Transfer keluar: saat pemain keluar, panggil transferOut untuk seluruh saldo dan kreditkan kembali ke ledger Anda saat SUCCESS.
- Hasil tidak diketahui: jika panggilan transfer timeout, query getTransferStatus dengan txId yang sama sebelum melakukan tindakan lain.
Metode API (ilustrasi)
| Metode | Tujuan | Field utama | Idempoten |
|---|---|---|---|
transferIn | Pindahkan dana dari wallet Anda ke saldo game pemain. | playerId, txId, amount, currency | Berdasarkan txId |
transferOut | Pindahkan dana dari saldo game kembali ke wallet Anda. | playerId, txId, amount | all | Berdasarkan txId |
getBalance | Baca saldo game pemain. | playerId | Ya (hanya baca) |
getTransferStatus | Mengembalikan PENDING, SUCCESS, atau FAILED untuk sebuah txId. | txId | Ya (hanya baca) |
Aturan yang harus dipatuhi backend Anda
- Satu txId per intent
- Buat txId sebelum panggilan pertama dan gunakan kembali untuk setiap retry. Jangan buat txId baru sebelum status txId sebelumnya diketahui.
- Debit ledger Anda lebih dulu
- Untuk transfer masuk, cadangkan nominal di ledger Anda sebelum memanggil SSG, lalu konfirmasi atau lepaskan saat status sudah final.
- Bersihkan saldo tertahan
- Jalankan job yang mencari pemain dengan saldo game tanpa sesi aktif, lalu transfer keluar saldonya. Ini mencakup pemain yang menutup browser di tengah sesi.
- Wagering dan laporan
- Karena Anda tidak melihat taruhan secara langsung, hitung turnover, wagering bonus, dan batas risiko dari laporan round yang diambil dari SSG, bukan dari callback.
- Rekonsiliasi
- Cocokkan setiap transfer masuk dan keluar dengan catatan SSG berdasarkan txId, dan beri alert untuk PENDING yang melebihi batas timeout Anda.
- Keamanan
- Tandatangani request dengan HMAC-SHA256, panggil hanya melalui TLS 1.2 atau lebih tinggi, simpan API key di secret store, dan batasi server Anda yang boleh memanggil SSG.
Skenario kegagalan
| Skenario | Single wallet | Transfer wallet |
|---|---|---|
| Timeout jaringan | Saat taruhan, SSG mengulang txId yang sama, lalu mengirim rollback setelah batas retry. Anda harus idempoten. | Hanya transfer yang terdampak. Query getTransferStatus dengan txId yang sama, lalu ambil tindakan. |
| Sistem Anda down | Pemain tidak dapat memulai atau melanjutkan round. Round yang terbuka di-rollback. | Pemain tetap bermain dengan saldo game yang ada. Transfer baru diblokir. |
| Request duplikat | Kembalikan respons tersimpan untuk txId tersebut dan jangan ubah apa pun. | Kembalikan hasil tersimpan untuk txId tersebut dan jangan ubah apa pun. |
| Pemain terputus di tengah round | Round selesai di sisi provider dan credit dikirim seperti biasa. | Round selesai dan dana tetap di saldo game hingga transfer keluar atau job pembersihan. |
| Saldo tidak cocok | Biasanya karena callback atau rollback yang terlewat. Ditemukan dengan membandingkan laporan round berdasarkan roundId. | Biasanya karena transfer tertahan atau tertunda. Ditemukan dengan membandingkan transfer berdasarkan txId. |
Mana yang harus Anda pilih
Pilih single wallet jika
- Anda sudah menjalankan layanan wallet atau ledger real-time.
- Anda memerlukan satu saldo untuk sportsbook, kasino, dan promosi.
- Anda memerlukan data taruhan langsung untuk risiko, wagering bonus, atau batas responsible gaming.
- Tim Anda mampu menjalankan layanan berlatensi rendah dengan ketersediaan tinggi.
Pilih transfer wallet jika
- Anda ingin meluncurkan dengan cepat dengan rekayasa seminimal mungkin.
- Anda belum memiliki layanan wallet real-time.
- Anda lebih suka panggilan outbound saja, tanpa callback publik yang harus diamankan.
- Jeda saldo tertahan yang singkat dapat diterima dan Anda dapat menjalankan job pembersihan.
Banyak operator memulai dengan transfer wallet untuk go live, lalu beralih ke single wallet setelah layanan wallet mereka siap. Tanyakan kepada kami bagaimana peralihan dilakukan secara bertahap.
Checklist integrasi
- Unique index pada txId dan handler idempoten untuk setiap panggilan yang memindahkan dana
- Pemeriksaan tanda tangan HMAC, toleransi timestamp, dan IP allowlist
- Nominal aman desimal dan validasi mata uang
- Uji timeout, retry, dan rollback di sandbox, termasuk retry yang terlambat
- Job rekonsiliasi harian berdasarkan roundId (single) atau txId (transfer)
- Pemantauan dan alert: latensi callback, tingkat error, transfer pending, saldo tertahan
Bicara dengan integration engineer
Kami dapat memandu engineer Anda menjelajahi sandbox dan membantu memilih model yang sesuai dengan platform Anda. Integrasi dijamin selesai dalam waktu kurang dari tujuh hari.
Email tim sales Chat via Telegram Kembali ke Product API
sales@ssggaming.com