Schnellstart: eine Zahlung akzeptieren

Am Ende haben Sie eine React-Komponente, die einen Solana-Pay-QR-Code für eine USDC-Zahlung anzeigt, auf den Eingang der Zahlung wartet und prüft, ob sie mit Ihrer Anforderung übereinstimmt. Sie benötigen Node.js 20+, eine React- oder Next.js-App (ein frisches create-next-app ist in Ordnung) und ein mobiles Wallet, das auf Devnet eingestellt ist. Laden Sie es mit Devnet-USDC von faucet.circle.com und Devnet-SOL von faucet.solana.com auf, um die Transaktions-Fee zu decken.

@solana/pay befindet sich derzeit in der Beta-Phase. APIs können sich vor der stabilen Veröffentlichung noch ändern.

1. Solana Pay installieren

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

2. Den Zahlungs-QR-Code hinzufügen

Die Komponente erstellt eine eindeutige Referenz für die Bestellung, kodiert sie in eine URL für eine Transfer-Anfrage und rendert die URL als QR-Code. Anschließend wartet sie auf eine Transaktion, die die Referenz enthält, und validiert Empfänger, Betrag und Token, bevor die Bestellung als bezahlt markiert wird. Legen Sie MERCHANT_WALLET auf eine Adresse fest, die Sie kontrollieren:

"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 wird in Token-Einheiten angegeben, daher fordert 1 einen USDC an. Lassen Sie splToken weg, um stattdessen SOL anzufordern.

3. Eine Zahlung entgegennehmen

Starten Sie Ihre App, scannen Sie den QR-Code mit Ihrem Wallet und bestätigen Sie die Zahlung. Sobald die Transaktion bestätigt ist und die Validierung besteht, zeigt die Komponente die Transaktionssignatur an. Diese Signatur ist Ihr Beleg: Sie können sie mit getTransaction oder in jedem Explorer nachschlagen.

Die Validierung im Browser reicht für eine Demo aus. Bevor Sie echte Bestellungen abwickeln, validieren Sie Zahlungen auf Ihrem Server. Siehe Zahlungen verifizieren.

Wie geht es weiter

Is this page helpful?

Inhaltsverzeichnis

Seite bearbeiten
© 2026 Solana Foundation. Alle Rechte vorbehalten.