Quickstart: een betaling accepteren

Je eindigt met een React-component die een Solana Pay-QR-code toont voor een USDC-betaling, wacht tot de betaling binnenkomt en controleert of deze overeenkomt met wat je hebt opgevraagd. Je hebt Node.js 20+, een React- of Next.js-app (een nieuwe create-next-app volstaat) en een mobiele wallet die op devnet is ingesteld nodig. Laad die op met devnet-USDC via faucet.circle.com en devnet-SOL via faucet.solana.com om de transactiekosten te dekken.

@solana/pay is momenteel in beta. API's kunnen veranderen vóór de stabiele release.

1. Installeer Solana Pay

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

2. Voeg de betaal-QR-code toe

De component maakt een unieke referentie voor de bestelling aan, codeert die in een transfer request-URL en rendert de URL als QR-code. Vervolgens wacht de component op een transactie die de referentie bevat en valideert hij de ontvanger, het bedrag en de token voordat de bestelling als betaald wordt gemarkeerd. Stel MERCHANT_WALLET in op een adres dat je beheert:

"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 is in tokeneenheden, dus 1 vraagt 1 USDC op. Laat splToken weg om in plaats daarvan SOL op te vragen.

3. Ontvang een betaling

Start je app, scan de QR-code met je wallet en keur de betaling goed. Zodra de transactie is bevestigd en de validatie doorstaat, toont de component de transactiehandtekening. Die handtekening is je bewijs van betaling: zoek hem op met getTransaction of in een willekeurige explorer.

Validatie in de browser is prima voor een demo. Valideer betalingen op je server voordat je echte bestellingen afhandelt. Zie betalingen verifiëren.

Wat nu?

Is this page helpful?

Inhoudsopgave

Pagina Bewerken
© 2026 Solana Foundation. Alle rechten voorbehouden.