Cara kerja checkout yang dihosting
RMT.GG tetap sebagai merchant yang tercatat. Toko mitra Anda mengirimkan jumlah dan mata uang yang terkunci. Pembeli membayar di halaman yang dihosting kami. Setelah pembayaran, Anda mengirimkan di toko Anda. Pesanan otomatis selesai sehingga penyelesaian dompet dapat berjalan.
- Pembeli membayar tepat jumlah dan mata uang yang Anda kirim. Kami tidak menambahkannya.
- Biaya penjual Anda adalah 4% dari jumlah yang terkunci tersebut. Listing di marketplace tetap di 5% seperti biasa.
- Biaya pemrosesan kartu, PayPal, dan crypto ditanggung oleh platform dalam alur ini.
Daftar putih diperlukan
Ajukan di bawah Pengaturan, Checkout yang dihosting, lalu tunggu persetujuan admin. Kunci API yang tidak disetujui akan menerima CHECKOUT_PARTNER_NOT_APPROVED.
Ajukan dan dapatkan persetujuan
Setelah disetujui, buat kunci API dengan checkout:write dan webhook JSON untuk checkout.completed di halaman pengaturan Hosted checkout. Hingga disetujui, API checkout yang dihosting tetap diblokir.
- 1Buka Pengaturan → Checkout yang dihosting dan kirimkan URL toko Anda plus catatan singkat tentang bagaimana Anda akan menggunakan checkout.
- 2Tunggu admin untuk menyetujui. Anda akan melihat badge tertunda sampai saat itu.
- 3Setelah disetujui, buat kunci API dan webhook JSON untuk checkout.completed di Pengaturan → Hosted checkout.
Seller API
Gunakan ini dari toko mana pun atau server Anda sendiri. Buat sesi dengan POST /api/v1/checkout/sessions. Kirim checkout:write dan Idempotency-Key. Arahkan pembeli ke hosted_url. Dengarkan order.paid, lalu penuhi di toko Anda.
Buat sesi checkout yang dihosting
curl -X POST -H "Authorization: Bearer rmt_sk_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: inv-12345" \
https://rmt.gg/api/v1/checkout/sessions \
-d @session.jsonsession.json
{
amount: 10, // required when items is omitted
currency: "USD", // optional; defaults to USD
itemName: "Gold pack", // required when items is omitted; alias title
description: "1000 gold for account example", // optional
imageUrl: "https://cdn.shop.example/gold.png", // optional, HTTPS only
categorySlug: "games", // send with offering, or omit both
offering: "Mods", // send with categorySlug
email: "[email protected]", // optional
returnUrl: "https://your-shop.example/thanks", // optional
cancelUrl: "https://your-shop.example/cancel", // optional
invoiceId: "12345" // optional
}Beberapa baris terkunci dengan pengiriman opsional (session.json)
{
currency: "USD",
invoiceId: "12345", // optional
items: [ // required when amount is omitted
{
name: "Gold pack", // required per line
description: "1000 gold", // optional
amount: 10, // required per line
quantity: 1, // optional, default 1
imageUrl: "https://cdn.shop.example/gold.png", // optional, HTTPS only
delivery: [ // optional
{ name: "Code", type: "text", value: "XXXX-YYYY" } // name and value required; type is optional
]
}
]
}- Kirim jumlah ditambah itemName (atau judul) untuk satu item, atau array items[] yang tidak kosong. Mata uang default adalah USD. Bidang opsional: deskripsi, URL gambar HTTPS, email (mengisi otomatis halaman pembayaran), returnUrl, cancelUrl, invoiceId, categorySlug ditambah offering (kirim keduanya atau tidak sama sekali), dan metadata. itemName adalah judul halaman pembayaran; deskripsi adalah salinan yang lebih panjang di bawahnya. Pembeli harus mengonfirmasi email yang valid sebelum membayar. Setelah pembayaran, pembeli tetap di konfirmasi RMT.GG sehingga mereka dapat menyalin bidang pengiriman. Jika Anda mengatur returnUrl dan ada bidang pengiriman, mereka akan melanjutkan ke toko Anda dari layar itu. Jika tidak ada, kami akan mengirim mereka kembali setelah hitungan mundur singkat. Jika Anda mengabaikan returnUrl atau cancelUrl, pembeli akan tetap di halaman pembayaran RMT.GG setelah pembayaran, pembatalan, atau kedaluwarsa.
- Jika berhasil, kami menambahkan uid pesanan ke returnUrl sebagai ?order= ketika URL tersebut HTTPS (atau localhost).
- Mengulangi nilai Idempotency-Key atau invoiceId menggunakan sesi yang sama alih-alih membuat duplikat.
- itemName dan deskripsi hanya muncul di halaman pembayaran RMT. Pembayaran dengan kartu, PayPal, dan crypto menggunakan label yang dikodekan dalam katalog seperti Games · Add-ons, bukan judul toko Anda. Atur default di bawah Pengaturan, Hosted checkout, atau kirim categorySlug dan offering pada sesi.
- Sesi berlangsung selama 24 jam. Setelah itu, halaman pembayaran tidak dapat diselesaikan, sesi Stripe dan PayPal yang sedang berlangsung ditutup, dan kami mengirim POST checkout.canceled dengan alasan kedaluwarsa.
- items[] adalah alternatif multi-baris untuk satu jumlah ditambah itemName. Setiap baris membutuhkan nama dan jumlah. Dengan items, jumlah dapat dihilangkan dan dihitung dari baris, atau harus cocok dengan jumlah jika Anda mengirimkannya. Jumlah terkunci di rmt.gg: pembeli tidak dapat menambah, menghapus, atau mengubah baris. imageUrl harus HTTPS; kami tidak mengambilnya. Bidang pengiriman opsional (teks, kata sandi, atau textarea) membutuhkan nama dan nilai. Mereka ditampilkan setelah pembayaran di halaman konfirmasi dan Pembelian. Public session GET hanya menyertakan nilai pengiriman setelah pembayaran. Seller GET dan webhook tidak pernah menyertakannya.
Periksa status pembayaran
Dengarkan checkout.completed terlebih dahulu. Jika webhook tertunda, DAPATKAN sesi. paid adalah true ketika pembeli telah membayar. Anda dapat mencarinya berdasarkan uid sesi atau berdasarkan invoiceId yang Anda kirim.
- DAPATKAN /api/v1/checkout/sessions/{uid} menggunakan uid yang dikembalikan saat Anda membuat sesi.
- DAPATKAN /api/v1/checkout/sessions?invoiceId=YOUR_INVOICE_ID jika Anda menyimpan id faktur Anda sendiri.
Cari berdasarkan id faktur
curl -H "Authorization: Bearer rmt_sk_live_…" \
https://rmt.gg/api/v1/checkout/sessions?invoiceId=inv-12345Digiseller dan toko serupa
Lewati ini jika Anda membuat checkout dengan Seller API. Gunakan ini ketika toko Anda (misalnya Digiseller) mengarahkan pembeli ke sini melalui metode pembayaran kustom. Digiseller mengirimkan ke URL Pembayaran kami, kami menerima pembayaran, kemudian Digiseller memeriksa URL Status.
- 1Salin URL Pembayaran, URL Status, dan rahasia pembayaran dari Pengaturan → Hosted checkout.
- 2Tempelkan ke Digiseller sebagai metode pembayaran kustom. Jaga rahasia tetap pribadi.
- 3Digiseller kemudian mengarahkan pembeli kepada kami untuk membayar, dan memeriksa URL Status untuk status dibayar atau tidak dibayar.
- item_name (atau judul) adalah judul di halaman pembayaran. deskripsi adalah salinan yang lebih panjang di bawahnya. Jika kedua nama dihilangkan, deskripsi digunakan sebagai judul.
Contoh permintaan yang dikirim Digiseller
{
"invoice_id": "12345",
"amount": "10.00",
"currency": "USD",
"item_name": "Paket Emas",
"description": "1000 emas untuk contoh akun",
"signature": "…"
}Suka webhook JSON
URL Status adalah untuk Digiseller. Jika Anda memenuhi dari server Anda sendiri, tambahkan webhook JSON dan dengarkan checkout.completed. Anda juga dapat DAPATKAN sesi sebagai cadangan.
JSON webhook
Checkout yang dihosting tidak menggunakan API webhook terpisah. Di bawah Developer, arahkan endpoint JSON HTTPS ke acara yang sama seperti penjualan marketplace. Setelah pembayaran, kami POST order.paid. Setelah pengembalian dana, kami POST order.refunded. Cocokkan penjualan dengan externalInvoiceId (invoiceId Anda) atau partnerSessionUid.
payload order.paid (field checkout yang dihosting)
{
"id": "whd_…",
"type": "order.paid",
"created": "2026-08-14T12:00:00.000Z",
"data": {
"order": {
"uid": "ord_…",
"status": "DIBAYAR",
"partnerSessionUid": "…",
"externalInvoiceId": "inv-12345",
"partnerSource": "api"
}
}
}- source adalah API untuk sesi Seller API.
- Penandatanganan opsional menggunakan X-RMT-Timestamp dan X-RMT-Signature. Verifikasi HMAC dengan cara yang sama seperti webhook penjual lainnya.
- checkout.canceled mencakup alasan buyer_canceled ketika pembeli meninggalkan halaman pembayaran tanpa membayar, atau alasan expired ketika TTL sesi 24 jam berakhir tanpa pembayaran.
- checkout.items mencantumkan baris terkunci (name, description, amount, quantity, imageUrl). Nilai pengiriman tidak pernah disertakan dalam webhooks.
Jangan penuhi dua kali
Digiseller juga mendapatkan callback pembayaran sendiri. Jika Anda juga mendengarkan checkout.completed, penuhi pesanan hanya sekali. Sesi Seller API tidak pernah mengirimkan callback Digiseller itu.
Email tamu dan kwitansi
Pembeli harus memasukkan email di halaman pembayaran agar kami dapat mengirimkan tanda terima dan faktur pajak. Akun RMT yang cocok akan dilampirkan tanpa perlu masuk sebagai pembeli.
- Jika email sudah milik akun RMT, pesanan muncul di Pembelian akun tersebut. Tidak ada cookie login yang diatur di halaman pembayaran.
- Email baru membuat pengguna ringan sehingga kwitansi dan masuk di kemudian hari tetap berfungsi.
- Email diperlukan untuk menyelesaikan pembayaran. Toko Anda harus tetap mendengarkan checkout.completed.
Mata uang dan batas
Gunakan mata uang ISO yang didukung seperti USD atau EUR. Pembayaran dengan kartu paling baik dilakukan dalam USD atau EUR. Crypto dan PayPal masih dapat digunakan untuk mata uang lain jika penyedia menerimanya.
Tidak di versi ini
Tidak ada iframe SDK, domain halaman pembayaran kustom, atau saldo dompet di halaman pembayaran yang dihosting. Pembeli menggunakan kartu, PayPal, atau checkout redirect crypto.
Sebelum Anda go live
Daftar periksa staging
Pengujian unit mencakup biaya, HMAC, dan penggunaan kembali. Jalani daftar ini di staging sebelum Anda mengirim pembeli yang sebenarnya.
- Ajukan, konfirmasi badge tertunda, lalu minta admin untuk menyetujui. Kredensial hanya muncul ketika disetujui. Kunci yang tidak disetujui pada POST /api/v1/checkout/sessions mengembalikan 403.
- Buat sesi dengan itemName, deskripsi, dan categorySlug serta offering (atau default yang disimpan). Buka hosted_url. Judulnya adalah nama item; deskripsi ada di bawahnya. Halaman pembayaran tidak memiliki navigasi atas atau sidebar. Bayar dengan kartu dalam USD atau EUR. Halaman kartu, PayPal, dan crypto harus menunjukkan label katalog seperti Games · Add-ons, bukan judul toko Anda.
- Konfirmasi checkout.completed mencakup invoiceId, checkout.uid, dan sumber, lalu penuhi di toko Anda. Batalkan halaman pembayaran dan konfirmasi checkout.canceled dengan alasan buyer_canceled. Biarkan sesi lebih dari 24 jam dan konfirmasi checkout.canceled dengan alasan expired tidak dapat dibayar.
- Untuk Digiseller, tempelkan URL Pembayaran, URL Status, dan rahasia pembayaran ke metode pembayaran kustom. Konfirmasi Digiseller dapat melihat status dibayar, dan bahwa Anda memenuhi pesanan hanya sekali.
- Bayar dengan email RMT yang sudah ada: pesanan akan masuk ke Pembelian dan tanda terima akan dikirim, tanpa cookie login. Email baru membuat pengguna ringan. Email diperlukan di halaman pembayaran.
- Tawaran sintetis yang tersembunyi tidak boleh muncul dalam pencarian marketplace. Di host yang dibatasi daftar tunggu, /pay/:uid dan rute adapter tetap berfungsi.
- Kirim imageUrl opsional dan items[] jika Anda memerlukan gambar produk atau beberapa baris terkunci. Pastikan halaman pembayaran tidak memiliki kontrol quantity. Setelah pembayaran, bidang pengiriman muncul di Pembelian dan halaman pesanan. Hanya URL gambar HTTPS.
Panduan terkait
Ajukan untuk checkout yang dihosting
Buka Pengaturan → Checkout yang dihosting untuk mengajukan, atau lompat ke referensi API setelah Anda disetujui.