У результаті ви отримаєте React-компонент, який показує QR-код Solana Pay для платежу в USDC, очікує надходження платежу та перевіряє, чи він відповідає запитаному. Вам знадобляться Node.js 20+, додаток на React або Next.js (щойно створений
create-next-app підійде) і мобільний гаманець, налаштований на devnet. Поповніть його
демонстраційними USDC (devnet) на faucet.circle.com та devnet SOL
на faucet.solana.com, щоб покрити комісії за транзакції.
@solana/pay наразі перебуває в бета-версії. API може змінитися до стабільного релізу.
1. Встановіть Solana Pay
pnpm add @solana/pay@beta @solana/kit
2. Додайте QR-код для оплати
Компонент створює унікальний референс для замовлення, кодує його в URL
запиту на переказ і
відображає цей URL як QR-код. Потім він відстежує транзакцію, що містить
цей референс, і перевіряє одержувача, суму та токен, перш ніж позначити
замовлення як оплачене. Задайте для MERCHANT_WALLET адресу, яку ви контролюєте:
"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 вказується в одиницях токена, тож 1 означає запит на 1 USDC. Пропустіть splToken, щоб
запросити SOL.
3. Прийміть платіж
Запустіть додаток, скануйте QR-код гаманцем і підтвердьте платіж. Щойно транзакцію буде підтверджено та вона пройде перевірку, компонент покаже підпис транзакції. Цей підпис слугує вашою квитанцією: знайдіть її за допомогою getTransaction або в будь-якому провіднику блоків.
Перевірка в браузері підходить для демо. Перш ніж виконувати реальні замовлення, перевіряйте платежі на своєму сервері. Див. перевірка платежів.
Що робити далі
- Solana Pay — запити на переказ, запити на транзакції та параметри QR-коду
- Як працюють платежі в Solana — гаманці, стейблкоїни, token account та комісії
- Перевірка платежів — підтвердіть платіж на стороні сервера перед виконанням замовлення
- Надсилання платежів — виплати та перекази з вашого власного бекенду
- Готовність до продакшну — перш ніж переходити до реальних грошей
Is this page helpful?