E-commerce

Pembayaran kripto untuk toko barang digital

Cara toko kunci, akun, unduhan, dan langganan menerima kripto: alur pengiriman, pembayaran sebagian, webhook berulang, dan apa yang dijanjikan ke pelanggan.

Toko yang menjual kunci lisensi, akun game, unduhan, atau akses punya satu sifat tak biasa: produk dikirim begitu uang tiba, tanpa perantara. Justru karena itulah kripto cocok, dan justru karena itu pula detail alur pembayaran penting. Panduan ini menjelaskan apa yang berubah, cara mengaitkan pengiriman dengan status pembayaran, dan kesalahan yang membuat toko digital kehilangan stok.

Mengapa barang digital dan kripto cocok

Tiga sifat barang digital sejalan dengan cara kerja pembayaran kripto:

  • Pengiriman instan, jadi pembayaran juga harus instan. Pelanggan yang menunggu kunci tidak mau menunggu penyelesaian bank. Pembayaran kripto final setelah jaringan mengonfirmasinya, dan sistem Anda bisa langsung mengirim.
  • Pasarnya sudah ada. Pembeli kunci perangkat lunak, item game, akses VPN, hosting, dan produk serupa sering memegang stablecoin dan lebih suka membayar dengannya, termasuk pelanggan di negara tempat kartu dari pasar Anda tidak berfungsi.
  • Tidak ada chargeback kartu. Pengirim tidak dapat membatalkan transfer kripto. Bagi toko yang pernah dirugikan pembayaran kartu yang disengketakan pada barang murah yang dikirim instan, ini perubahan nyata. Ini juga berarti pengembalian dana adalah keputusan Anda dan transfer yang Anda kirim sendiri, jadi tulis kebijakan pengembalian sebelum meluncur.

Harga tetap sederhana: Anda menetapkan harga dalam dolar AS dan pelanggan membayar setaranya dalam aset dan jaringan yang dipilihnya di halaman pembayaran.

Alur dari keranjang sampai produk terkirim

Jalur satu pesanan seperti ini:

  1. Pelanggan menambahkan produk dan memasukkan alamat email (atau masuk ke akun).
  2. Di checkout ia memilih «Bayar dengan kripto». Server Anda membuat pembayaran untuk pesanan dan menerima tautan ke halaman pembayaran yang dihosting.
  3. Anda mengarahkan pelanggan ke halaman itu. Ia memilih aset dan jaringan lalu membayar jumlah persis dari dompetnya sendiri.
  4. Saat pembayaran selesai, gateway memanggil webhook Anda.
  5. Server Anda menandai pesanan sebagai dibayar, mengambil kunci atau memberi akses, lalu mengirimkannya lewat email dan di halaman pesanan.

Toko Anda tidak pernah membuat alamat, memantau blockchain, atau mencocokkan jumlah. Ia hanya melakukan dua hal: membuat pembayaran dan bereaksi pada status akhir. Versi langkah demi langkah dengan kode ada di cara menerima pembayaran kripto di situs web.

Buat pembayaran dengan nomor pesanan Anda sendiri

Buat pembayaran dari backend Anda dengan satu POST ke https://api.qvard.com/api/v1/payment. Permintaan membawa kunci Anda di header Authorization: Bearer dan JSON berisi nomor pesanan sebagai id, price dalam dolar AS, dan opsional paymentSystemId bila Anda ingin halaman terbuka dengan aset dan jaringan tertentu. Responsnya 201 dengan redirectUrl.

Gunakan nomor pesanan yang sudah ada di sistem Anda sebelum pembayaran, satu per pembelian. Jika permintaan melewati batas waktu dan Anda mengirim ulang dengan id yang sama untuk metode pembayaran yang sama, Anda mendapat pembayaran yang sudah ada, bukan yang kedua, sehingga pengiriman ulang itu aman.

Buat pembayaran hanya setelah pelanggan menekan bayar, bukan saat keranjang disusun. Jika tidak, keranjang yang ditinggalkan akan tampak sebagai tumpukan pembayaran yang belum dibayar.

Kirim hanya saat pembayaran lengkap, dan hanya sekali

Ini aturan yang melindungi stok Anda. Pembayaran punya empat status: wait (dibuat), partial (pelanggan mengirim kurang dari yang diminta), completed (jumlah penuh tiba), dan rejected. Qvard memanggil webhook Anda saat pembayaran selesai, dengan id yang Anda kirim dan status.

Dari sini muncul dua syarat untuk handler Anda:

  • Proses hanya saat statusnya completed. Jangan pernah memberikan kunci hanya karena pelanggan kembali ke situs Anda, atau saat jumlahnya baru sebagian. Bukti pembayaran datang dari webhook, bukan browser.
  • Buat idempoten. Webhook dikirim ulang sampai endpoint Anda membalas persis dengan HTTP 200 (lima percobaan dalam sekitar enam menit), dan pengiriman ulang bisa tiba setelah yang pertama sudah berhasil. Serahkan kunci dan tandai pesanan sebagai terkirim dalam satu transaksi database, dan lewati pesanan yang sudah terkirim. Jika tidak, satu pembayaran bisa membuat Anda kehilangan dua kunci.

Verifikasi tanda tangan X-Qvard-Signature pada setiap webhook: HMAC-SHA256 dengan kunci rahasia Anda, dibandingkan dalam waktu konstan; tolak yang tidak cocok. Selengkapnya di cara mengamankan webhook pembayaran kripto.

Node.jsdeliver.js
// Called from the Qvard webhook handler after the X-Qvard-Signature check.
async function onQvardEvent({ id, status }) {
  const order = await db.orders.findById(id);
  if (!order) return;                          // unknown order: ignore

  if (status !== 'completed') return;          // deliver only on a full payment
  if (order.deliveredAt) return;               // the webhook can arrive twice

  // One transaction: take a key and mark the order, so a retry cannot take a second key.
  await db.transaction(async (tx) => {
    const key = await tx.licenseKeys.takeFree(order.productId);
    await tx.orders.update(order.id, { state: 'paid', deliveredAt: new Date(), keyId: key.id });
    await mailer.send(order.email, 'Your purchase', 'Key: ' + key.value);
  });
}

Tunjukkan kepada pelanggan apa yang terjadi

URL pengembalian setelah pembayaran belum tersedia, jadi pelanggan yang sudah membayar kembali ke situs Anda dengan sendirinya, sering beberapa detik sebelum webhook Anda diproses. Bersiaplah untuk saat itu:

  • Beri setiap pesanan halaman yang menampilkan status saat ini: menunggu pembayaran, dibayar dan terkirim, atau ada masalah.
  • Buat halaman memuat ulang sendiri selama status masih menunggu, agar kunci muncul tanpa memuat ulang.
  • Kirim juga kunci lewat email. Orang menutup tab, dan email adalah salinan yang akan mereka cari nanti.
  • Jika pesanan belum ditandai dibayar, katakan dengan jelas dan minta pelanggan tidak membayar dua kali.

Sebagian besar tiket dukungan di toko digital berbunyi «saya sudah bayar tapi tidak menerima apa-apa». Halaman status dan email paling efektif mengurangi jumlahnya.

Kurang bayar dan pesanan kedaluwarsa

Pelanggan kripto kadang mengirim sedikit kurang dari yang diminta, karena biaya penarikan bursa dipotong dari jumlah, atau membayar lebih lambat dari rencana. Putuskan apa yang dilakukan sebelum itu terjadi.

  • Pembayaran sebagian. Statusnya partial. Jangan kirim. Pilihan umum adalah membiarkan pesanan terbuka dan meminta pelanggan mengirim sisanya, atau mengembalikan dana dan membatalkan. Pilih satu dan beri tahu pelanggan di halaman pesanan.
  • Kurs dan waktu. Kurs di halaman pembayaran dikunci selama satu jam, jadi jumlahnya tidak bergerak saat pelanggan membayar. Tahan stok untuk pesanan setidaknya selama itu dan lepaskan jika pesanan tidak pernah dibayar.
  • Stok terbatas. Jika tersisa satu kunci, cadangkan saat pembayaran dibuat dan lepaskan saat kedaluwarsa; jika tidak, dua pelanggan bisa membayar kunci yang sama.

Jaga logika tetap kecil. Toko dengan tepat tiga hasil (dibayar, sebagian, tidak dibayar) lebih mudah dijalankan daripada yang punya selusin kasus khusus.

Apa yang disampaikan kepada pelanggan

Halaman pembayaran yang jelas konversinya lebih baik daripada yang cerdik. Di dekat tombol, sebutkan:

  • aset dan jaringan apa yang Anda terima (lihat koin yang didukung) dan bahwa pelanggan harus membayar di jaringan yang dipilihnya di halaman pembayaran;
  • bahwa pengiriman otomatis setelah pembayaran selesai, dan di mana kunci akan muncul;
  • aturan pengembalian dana Anda dalam satu kalimat, karena pelanggan tidak dapat membatalkan pembayaran kripto.

Sebutkan juga harga dalam dolar dan biarkan halaman pembayaran menampilkan jumlah persis dalam aset yang dipilih. Jangan mencantumkan sendiri jumlah kripto di halaman produk; jumlah itu berubah mengikuti kurs.

Apa yang sudah siap di Qvard hari ini dan apa yang belum

Bersikaplah realistis tentang apa yang Anda integrasikan. Qvard bekerja lewat API: toko Anda membuat pembayaran dan menerima webhook. Belum ada plugin siap pakai untuk platform toko, tautan pembayaran dan sandbox terpisah masih dalam pengembangan, dan pelanggan kembali ke situs Anda dengan sendirinya setelah membayar. Untuk toko yang punya developer, atau satu jam kerja freelancer, ini potongan kode kecil. Lihat dokumentasi developer dan ikhtisar integrasi, lalu buka faktur demo untuk melihat apa yang akan dilihat pelanggan Anda.

Soal uang, dana berada di saldo Qvard Anda dan Anda menariknya ke dompet sendiri; penarikan hanya dikenai biaya jaringan, dan tidak ada biaya langganan. Penarikan ke rekening bank dalam fiat tidak tersedia.

FAQ

Bisakah saya mengirim produk otomatis setelah pembayaran kripto?

Bisa. Qvard memanggil webhook Anda saat pembayaran selesai, lalu server Anda dapat mengambil kunci atau memberi akses dan mengirimkannya ke pelanggan. Kirim hanya pada status completed dan buat handler aman bila dijalankan dua kali.

Apa yang terjadi jika pelanggan mengirim kurang dari jumlah penuh?

Pembayaran mendapat status partial dan webhook penyelesaian tidak dikirim. Jangan kirim produk. Minta pelanggan mengirim sisanya atau kembalikan dananya, sesuai kebijakan Anda.

Apakah ada chargeback pada pembayaran kripto?

Tidak. Pengirim tidak dapat membatalkan transfer kripto. Itu melindungi Anda dari pembayaran kartu yang disengketakan, tetapi juga berarti pengembalian dana dikirim oleh Anda, jadi tetapkan kebijakan pengembalian sejak awal.

Bisakah saya menetapkan harga dalam dolar?

Bisa, harga ditetapkan dalam dolar AS. Pelanggan membayar setaranya dalam aset dan jaringan yang dipilih di halaman pembayaran, dengan kurs yang dikunci selama satu jam.

Apakah ada plugin untuk platform toko saya?

Belum. Saat ini integrasi dilakukan lewat API: satu permintaan untuk membuat pembayaran dan satu webhook untuk menerima hasilnya.

Artikel terkait

Artikel terkait