Vous obtiendrez un composant React qui affiche un code QR Solana Pay pour un paiement en USDC, attend que le paiement soit enregistré et vérifie qu'il correspond à ce que vous avez demandé. Vous avez besoin de Node.js 20+, d'une application React ou Next.js (un nouveau create-next-app convient) et d'un portefeuille mobile configuré sur devnet. Alimentez-le avec des USDC devnet depuis faucet.circle.com et des SOL devnet depuis faucet.solana.com pour couvrir les frais de transaction.
@solana/pay est actuellement en version bêta. Les API peuvent changer avant la version stable.
1. Installer Solana Pay
pnpm add @solana/pay@beta @solana/kit
2. Ajouter le code QR de paiement
Le composant crée une référence unique pour la commande, l'encode dans une URL de demande de transfert et affiche cette URL sous forme de code QR. Il surveille ensuite l'arrivée d'une transaction incluant la référence et valide le destinataire, le montant et le token avant de marquer la commande comme payée. Définissez MERCHANT_WALLET avec une adresse que vous contrôlez :
"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 est exprimé en unités du token, donc 1 demande 1 USDC. Omettez splToken pour demander des SOL à la place.
3. Effectuer un paiement
Lancez votre application, scannez le code QR avec votre portefeuille et approuvez le paiement. Une fois la transaction confirmée et validée, le composant affiche la signature de la transaction. Cette signature est votre reçu : consultez-la avec getTransaction ou dans n'importe quel explorateur.
La validation dans le navigateur convient pour une démo. Avant d'honorer de vraies commandes, validez les paiements sur votre serveur. Consultez vérifier les paiements.
Prochaines étapes
- Solana Pay - demandes de transfert, demandes de transaction et options de code QR
- Comment fonctionnent les paiements sur Solana - portefeuilles, stablecoins, token accounts et frais
- Vérifier les paiements - confirmer un paiement côté serveur avant d'exécuter une commande
- Envoyer des paiements - versements et transferts depuis votre propre backend
- Prêt pour la production - avant que de l'argent réel ne circule
Is this page helpful?