Quickstart: terima pembayaran

Anda akan memiliki komponen React yang menampilkan kode QR Solana Pay untuk pembayaran USDC, menunggu pembayaran masuk, dan memeriksa apakah pembayaran tersebut sesuai dengan yang Anda minta. Anda memerlukan Node.js 20+, aplikasi React atau Next.js (aplikasi create-next-app baru sudah cukup), dan dompet seluler yang diatur ke devnet. Isi dompet dengan USDC devnet dari faucet.circle.com dan SOL devnet dari faucet.solana.com untuk menutup biaya transaksi.

@solana/pay saat ini dalam versi beta. API dapat berubah sebelum rilis stabil.

1. Instal Solana Pay

pnpm add @solana/pay@beta @solana/kit

2. Tambahkan kode QR pembayaran

Komponen ini membuat referensi unik untuk pesanan, mengodekannya ke dalam URL permintaan transfer, dan merender URL tersebut sebagai kode QR. Komponen kemudian memantau transaksi yang menyertakan referensi tersebut dan memvalidasi penerima, jumlah, dan token sebelum menandai pesanan sebagai lunas. Atur MERCHANT_WALLET ke alamat yang Anda kendalikan:

"use client";
import { useEffect, useRef, useState } from "react";
import {
address,
createSolanaRpc,
createSolanaRpcSubscriptions,
generateKeyPair,
getAddressFromPublicKey
} from "@solana/kit";
import {
createQR,
encodeURL,
validateTransfer,
watchReference
} from "@solana/pay";
const MERCHANT_WALLET = address("your-wallet-address");
const USDC_DEVNET = address("4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU");
const AMOUNT = 1;
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const rpcSubscriptions = createSolanaRpcSubscriptions(
"wss://api.devnet.solana.com"
);
export function Checkout() {
const qrRef = useRef<HTMLDivElement>(null);
const [signature, setSignature] = useState<string | null>(null);
useEffect(() => {
const abortController = new AbortController();
async function startPayment() {
const keyPair = await generateKeyPair();
const reference = await getAddressFromPublicKey(keyPair.publicKey);
const url = encodeURL({
recipient: MERCHANT_WALLET,
amount: AMOUNT,
splToken: USDC_DEVNET,
reference,
label: "My Store",
message: "Order #1001"
});
if (abortController.signal.aborted) return;
if (qrRef.current) {
qrRef.current.innerHTML = "";
createQR(url, 300).append(qrRef.current);
}
const result = await watchReference(rpcSubscriptions, reference, {
abortSignal: abortController.signal
});
if (result.err) throw new Error("Payment transaction failed");
await validateTransfer(rpc, result.signature, {
recipient: MERCHANT_WALLET,
amount: AMOUNT,
splToken: USDC_DEVNET,
reference
});
setSignature(result.signature);
}
startPayment().catch((error) => {
if (!abortController.signal.aborted) console.error(error);
});
return () => abortController.abort();
}, []);
if (signature) return <p>Payment confirmed: {signature}</p>;
return <div ref={qrRef} />;
}

amount menggunakan satuan token, jadi 1 berarti meminta 1 USDC. Hilangkan splToken untuk meminta SOL.

3. Terima pembayaran

Jalankan aplikasi Anda, pindai kode QR dengan dompet Anda, dan setujui pembayaran. Setelah transaksi terkonfirmasi dan lolos validasi, komponen menampilkan tanda tangan transaksi. Tanda tangan tersebut adalah bukti pembayaran Anda: cari dengan getTransaction atau di explorer mana pun.

Validasi di browser sudah cukup untuk demo. Sebelum memenuhi pesanan sungguhan, validasi pembayaran di server Anda. Lihat verifikasi pembayaran.

Langkah selanjutnya

Is this page helpful?

Daftar Isi

Edit Halaman
© 2026 Yayasan Solana. Semua hak dilindungi.