Solana Pay
Solana Pay adalah kerangka pembayaran open-source yang memungkinkan transaksi instan dengan biaya hampir nol di Solana.
Sudah dipercaya oleh jutaan bisnis melalui integrasi Shopify, Solana Pay mengubah perdagangan dengan sepenuhnya menghilangkan perantara pembayaran tradisional.
Core Functionalities
Solana Pay dicirikan oleh:
- Penyelesaian Langsung: Pembayaran langsung dari dompet pelanggan ke pedagang dalam SOL atau token SPL lainnya. Tanpa bank, pemroses, atau perantara yang mengambil potongan.
- Finalitas Instan: Dana tiba segera setelah konfirmasi berkat penyelesaian sub-detik Solana.
- Kompatibilitas Universal: Satu implementasi berfungsi dengan setiap dompet dan aplikasi Solana.
Semuanya melalui dua jenis permintaan dasar:
Permintaan transfer (pembayaran sederhana)
URL non-interaktif untuk transaksi yang telah ditentukan. Semua informasi dikodekan dalam URL.
solana:mvines9iiHiQTysrwkJjGf2gb9Ex9jXJX8ns3qwf2kN?amount=0.01&spl-token=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
Permintaan transaksi (pembayaran dinamis)
URL interaktif yang menyusun transaksi kompleks di sisi server.
Dompet membuat permintaan HTTP ke server Anda, yang mengembalikan transaksi kustom yang dibuat dengan data real-time.
Opsi integrasi
Solana Pay hadir dengan:
- Kode QR: Pembayaran langsung secara instan
- Tautan yang Dapat Dibagikan: Berfungsi di semua platform
- Tombol Tertanam: Pengalaman checkout yang mulus
- Alur Kustom: Transaksi multi-pihak, akses bersyarat, penandatanganan parsial
Why It Matters
Solana Pay menggantikan seluruh tumpukan pembayaran tradisional dengan URL sederhana. Alih-alih berintegrasi dengan berbagai dompet dan menangani alur transaksi yang kompleks, Anda membuat tautan terstandarisasi yang berfungsi di mana saja secara otomatis.
Alur Pembayaran Tradisional: Pelanggan → Bank → Pemroses Pembayaran → Bank Anda → Anda (beberapa hari kemudian, dikurangi biaya)
Alur Solana Pay: Pelanggan → Anda (secara instan, biaya hampir nol)
Reference
Referensi adalah salah satu bagian terpenting dari stack Solana Pay. Karena backend Anda tidak mengirimkan transaksi ke jaringan tetapi hanya mengembalikan respons transaksi yang ditandatangani oleh dompet, tidak ada tanda tangan transaksi yang membantu menentukan apakah pembayaran telah dilakukan.
Sebuah reference
adalah kunci publik unik yang disertakan sebagai akun non-penandatangan, non-writable dalam transaksi. Ini tidak mempengaruhi perilaku transaksi tetapi berfungsi sebagai pengidentifikasi pelacakan.
Berikut alurnya:
- Buat referensi unik (publickey) untuk setiap permintaan pembayaran
- Sertakan dalam URL permintaan transaksi Anda sebagai parameter
- Tambahkan ke instruksi transaksi Anda sebagai akun non-penandatangan
- Lacak transaksi menggunakan referensi tersebut
Anda dapat menggunakan metode RPC getSignaturesForAddress
Solana atau helper findReference
dari library @solana/pay
untuk menemukan transaksi yang berisi referensi Anda seperti ini:
useEffect(() => {
// Poll the network for transactions that include the reference address
const interval = setInterval(async () => {
try {
// Find transactions that include the reference address
const signatureInfo = await findReference(connection, reference, {
until: mostRecentNotifiedTransaction.current, // Only look for transactions after the most recent one we've found
finality: "confirmed",
});
// Update the most recent transaction with the transaction we just found
mostRecentNotifiedTransaction.current = signatureInfo.signature;
// Toast notification
displayToast(signatureInfo.signature);
} catch (e) {
if (e instanceof FindReferenceError) {
// No transaction found yet, ignore this error
return;
}
console.error("Unknown error", e);
}
}, 1000); // Check for new transactions every second
return () => {
clearInterval(interval);
};
}, [reference]);
QR Code Generation
Ubah permintaan transaksi apa pun menjadi kode QR yang dapat dipindai menggunakan library @solana/pay
:
import { createQR, encodeURL, TransactionRequestURLFields } from '@solana/pay';
const urlParams: TransactionRequestURLFields = {
link: new URL("https://yourapi.com/pay"),
};
const solanaUrl = encodeURL(urlParams);
const qr = createQR(
solanaUrl,
400,
"transparent"
);