W rezultacie otrzymasz komponent React, który wyświetla kod QR Solana Pay dla płatności w USDC, czeka na jej zaksięgowanie i sprawdza, czy jest zgodna z Twoim żądaniem. Potrzebujesz Node.js 20+, aplikacji React lub Next.js (świeży projekt create-next-app wystarczy) oraz mobilnego portfela ustawionego na devnet. Zasil go środkami devnet USDC z faucet.circle.com oraz devnet SOL z faucet.solana.com, aby pokryć opłaty transakcyjne.
@solana/pay jest obecnie w fazie beta. Interfejsy API mogą ulec zmianie przed stabilną wersją.
1. Zainstaluj Solana Pay
pnpm add @solana/pay@beta @solana/kit
2. Dodaj kod QR płatności
Komponent tworzy unikalny identyfikator referencyjny zamówienia, koduje go w adresie URL żądania transferu i renderuje ten adres jako kod QR. Następnie czeka na transakcję zawierającą ten identyfikator i przed oznaczeniem zamówienia jako opłaconego sprawdza odbiorcę, kwotę oraz token. Ustaw MERCHANT_WALLET na adres, który kontrolujesz:
"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 jest podawane w jednostkach tokena, więc 1 oznacza żądanie 1 USDC. Pomiń splToken, aby zażądać SOL.
3. Przyjmij płatność
Uruchom aplikację, zeskanuj kod QR portfelem i zatwierdź płatność. Gdy transakcja zostanie potwierdzona i przejdzie walidację, komponent wyświetli sygnaturę transakcji. Ta sygnatura jest Twoim potwierdzeniem: wyszukaj ją za pomocą getTransaction lub w dowolnym eksploratorze.
Walidacja w przeglądarce wystarcza do demonstracji. Zanim zaczniesz realizować prawdziwe zamówienia, waliduj płatności na swoim serwerze. Zobacz sekcję weryfikacji płatności.
Co dalej
- Solana Pay – żądania transferu, żądania transakcji i opcje kodu QR
- Jak działają płatności w Solanie – portfele, stablecoiny, token account i opłaty
- Weryfikacja płatności – potwierdź płatność po stronie serwera przed realizacją zamówienia
- Wysyłanie płatności – wypłaty i przelewy z własnego backendu
- Gotowość produkcyjna – zanim zaczną przepływać prawdziwe pieniądze
Is this page helpful?