UUGate
← Kembali ke pusat tutorial

Wallet dan penerimaan

Wallet eksklusif untuk deposit — disarankan

Disarankan untuk deposit anggota: tanpa nominal di awal atau hitung mundur, dengan kredit sesuai dana masuk. Mencakup dasbor, binding API, pencarian, dan callback.

Sekitar 8 menit membacaDiperbarui 2026-09-24
Tonton video04:31 · Audio dan takarir bahasa Indonesia

Tonton dalam layar penuh atau pilih bab. Saat mengirim atau menerima dana, gunakan informasi dari dasbor Anda sendiri.

Panduan langkah demi langkah

Ikuti langkahnya di dasbor Anda. Klik gambar untuk memperbesar.

  1. Untuk isi saldo anggota, kami menyarankan wallet eksklusif. Hubungkan satu alamat dengan setiap anggota agar bisa dipakai untuk deposit berulang. Nominal tidak perlu ditentukan sebelumnya dan tidak ada hitung mundur pembayaran. Ini menghindari masalah pencocokan akibat perbedaan nominal atau pesanan kedaluwarsa. Jaringan, aset, dan konfirmasi tetap harus diperiksa.

    Langkah 1 · Klik untuk memperbesar
  2. Buka daftar wallet, pilih Buat wallet, tentukan aset dan jaringan, lalu pilih Wallet eksklusif. Jika anggota mengirim USDT melalui TRON, pilih TRC20-USDT. Jaringan harus sesuai dengan jaringan pengiriman anggota. TRC20-USDT · BEP20-USDT · BEP20-USDC · SPL-USDC.

    Langkah 2 · Klik untuk memperbesar
  3. Isi informasi binding dengan ID anggota yang tetap dan unik. Nilai ini adalah bindKey pada API, bukan UID merchant. Untuk menambah saldo otomatis, masukkan URL callback server Anda. Jika kosong, pengaturan bawaan merchant akan digunakan. Periksa kuota sebelum membuat wallet. Contohnya, MEMBER_10001 adalah ID anggota. notifyUrl harus berupa URL HTTPS publik. Jangan memberikan alamat isi saldo biaya kepada anggota.

    Langkah 3 · Klik untuk memperbesar
  4. Filter daftar dengan mode Wallet eksklusif, lalu periksa aset dan alamat anggota. Wallet yang dibuat melalui API juga muncul di sini. Untuk anggota, jaringan, dan aset yang sama, gunakan kembali binding yang ada. Tidak perlu wallet baru untuk setiap deposit.

    Langkah 4 · Klik untuk memperbesar
  5. Buka checkout dari baris wallet. Tidak ada kolom nominal atau hitung mundur pembayaran. Berikan alamat lengkap atau tautan checkout kepada anggota yang sesuai. Anggota menentukan nominal deposit, dan sistem Anda menambah saldo sesuai dana yang benar-benar diterima. Biarkan wallet aktif untuk menerima deposit. Sebelum menonaktifkannya, beri tahu anggota agar berhenti mengirim dana ke alamat tersebut.

    Langkah 5 · Klik untuk memperbesar
  6. Untuk integrasi API, buka alat resmi dan pilih Buat wallet eksklusif. Isi aset, ID binding anggota, dan URL callback. Endpoint ini tidak memerlukan nominal, masa berlaku, atau nomor pesanan merchant. Pesanan penerimaan dibuat setelah deposit terdeteksi. POST /openapi/payin/exclusive-bindings · chainCode · tokenSymbol · bindKey · label? · notifyUrl?

    Langkah 6 · Klik untuk memperbesar
  7. Lakukan autentikasi dari server dengan Merchant UID + API Key serta header x-api-key, x-merchant-uid, x-timestamp, x-nonce, dan x-signature. Pesan HMAC-SHA256 terdiri dari tujuh baris: UID, timestamp milidetik, nonce, metode HTTP huruf besar, path tanpa query, query kanonis, dan body kanonis. Gunakan SDK resmi atau kode dari alat, dengan timestamp serta nonce baru untuk setiap permintaan. Periksa data sebelum membuat binding nyata.

    Langkah 7 · Klik untuk memperbesar
  8. Simpan bindingId, addressId, address, bindKey, chainCode, tokenSymbol, dan status; status seharusnya active. Kombinasi merchant + jaringan + aset + bindKey yang sama mengembalikan binding yang sudah ada. Pembuatan ulang tidak mengganti label atau notifyUrl. Respons tidak berisi cashierUrl: tampilkan address di halaman deposit Anda atau salin tautan checkout dari dasbor.

  9. Gunakan GET /openapi/payin/exclusive-bindings/{bindKey}?chainCode=TRON&tokenSymbol=USDT&recentLimit=10. Encode bindKey untuk URL. GET tidak memiliki body, tetapi query ikut ditandatangani. Respons berisi stats, recentOrders, dan recentTransactions. recentLimit menerima 1 sampai 20 dan tidak menggantikan riwayat keuangan lengkap. Untuk satu pesanan, gunakan GET /openapi/payin/orders/{orderNo}.

  10. Setelah deposit diproses, platform mengirim callback ke notifyUrl wallet, atau pengaturan bawaan jika kosong. Verifikasi rawBody dengan API Key yang terkait dengan pesanan, lalu periksa merchant, jaringan, aset, bindKey, dan status=completed. Tambahkan paidAmount, yaitu dana yang benar-benar diterima. Gunakan (merchantUid, orderNo) sebagai kunci unik dan simpan deduplikasi serta penambahan saldo dalam satu transaksi database. Kembalikan HTTP 2xx setelah berhasil. Akui notifikasi duplikat tanpa menambah saldo lagi. Jangan hanya memakai bindKey untuk deduplikasi karena deposit berikutnya akan terabaikan.

    Langkah 10 · Klik untuk memperbesar
  11. Pada pesanan penerimaan, filter berdasarkan alamat, label, atau ID binding. Periksa nominal, status, dan hash. API juga bisa mencari pesanan serta transaksi terbaru milik binding, lalu detail satu pesanan. Panduan tertulis menyediakan jalur endpoint dan contohnya. Cocokkan hasil dengan catatan wallet dan saldo anggota pada sistem Anda. Tombol Callback mengirim ulang notifikasi, bukan membuka riwayat. Pastikan deduplikasi bekerja sebelum memakainya.

    Langkah 11 · Klik untuk memperbesar
  12. Jika saldo anggota belum berubah, periksa jaringan, aset, dan konfirmasi. Setelah itu, periksa pesanan, URL callback, dan log server penerima. Jika tanda tangan gagal, periksa kanonisasi, waktu, dan nonce. Jika binding tidak ditemukan, periksa merchant, jaringan, aset, dan bindKey. Periksa juga status akun, kuota alamat, dan saldo biaya.

Gunakan ID berbeda untuk setiap anggota dan gunakan kembali binding pada jaringan serta aset yang sama. Tambahkan saldo sesuai dana masuk setelah callback diverifikasi, lalu cegah duplikasi berdasarkan pesanan.

Alur deposit anggota

Anggota masuk dan memilih jaringan serta aset
→ Server mengambil bindKey anggota yang tetap
→ Buat atau kueri penautan eksklusif dan gunakan kembali alamatnya
→ Anggota memilih nominal untuk dikirim ke alamat tersebut
→ Platform mendeteksi dan mengonfirmasi deposit, lalu membuat pesanan eksklusif
→ Verifikasi callback completed dan kreditkan paidAmount satu kali per pesanan
→ Cocokkan pesanan dan catatan dasbor dengan pengkreditan saldo anggota

Node.js: buat atau gunakan kembali penautan (membuat wallet nyata)

import { UUGateClient } from 'uugate-openapi-sdk';

const client = new UUGateClient({
  baseUrl: 'https://api.uugate.com',
  merchantUid: process.env.UUGATE_MERCHANT_UID,
  apiKey: process.env.UUGATE_API_KEY,
});
const binding = await client.createExclusiveBinding({
  chainCode: 'TRON',
  tokenSymbol: 'USDT',
  bindKey: 'MEMBER_10001',
  label: 'MEMBER_10001',
  notifyUrl: 'https://merchant.example.com/uugate/notify',
});

Node.js: kueri penautan dan deposit terbaru (gunakan client di atas)

const bindKey = 'MEMBER_10001';
const detail = await client.request('GET',
  '/openapi/payin/exclusive-bindings/' + encodeURIComponent(bindKey), {
    query: { chainCode: 'TRON', tokenSymbol: 'USDT', recentLimit: 10 },
  });

Pengkreditan melalui callback (pseudocode; terapkan dalam transaksi database)

Pertahankan body HTTP asli sebagai rawBody
Verifikasi x-callback-signature dengan API Key yang terkait dengan pesanan:
  HMAC-SHA256(apiKey, timestamp + "." + nonce + "." + rawBody)
Validasi timestamp, perlindungan replay, dan kolom bisnis
Wajibkan merchantUid yang benar dan status == "completed"
Temukan anggota melalui bindKey + chainCode + tokenSymbol
Dalam satu transaksi database:
  Catat deposit dengan kunci unik (merchantUid, orderNo)
  Sudah tercatat → jangan kreditkan lagi
  Catatan pertama → tambahkan paidAmount ke saldo dengan aritmetika desimal
Kembalikan 2xx setelah berhasil; jika gagal, kembalikan selain 2xx dan catat kesalahan
// bindKey mengidentifikasi anggota; orderNo mengidentifikasi satu deposit. Jangan tertukar.

Perbesar tangkapan layar