Você terá um componente React que exibe um QR code do Solana Pay para um pagamento em USDC, aguarda o pagamento chegar e verifica se ele corresponde ao que você solicitou. Você precisa do Node.js 20+, um app React ou Next.js (um create-next-app novo está ótimo) e uma carteira móvel configurada para a devnet. Adicione fundos a ela com USDC da devnet em faucet.circle.com e SOL da devnet em faucet.solana.com para cobrir as taxas de transação.
O @solana/pay está atualmente em beta. As APIs podem mudar antes do lançamento estável.
1. Instalar o Solana Pay
pnpm add @solana/pay@beta @solana/kit
2. Adicionar o QR code de pagamento
O componente cria uma referência única para o pedido, a codifica em uma URL de solicitação de transferência e renderiza a URL como um QR code. Em seguida, ele monitora uma transação que inclua a referência e valida o destinatário, o valor e o token antes de marcar o pedido como pago. Defina MERCHANT_WALLET como um endereço que você controla:
"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 é expresso em unidades do token, então 1 solicita 1 USDC. Omita splToken para solicitar SOL.
3. Realizar um pagamento
Execute seu app, escaneie o QR code com sua carteira e aprove o pagamento. Assim que a transação for confirmada e passar na validação, o componente exibe a assinatura da transação. Essa assinatura é o seu recibo: consulte-a com getTransaction ou em qualquer explorador.
A validação no navegador é suficiente para uma demonstração. Antes de processar pedidos reais, valide os pagamentos no seu servidor. Veja verificar pagamentos.
Próximos passos
- Solana Pay - solicitações de transferência, solicitações de transação e opções de QR code
- Como os pagamentos funcionam no Solana - carteiras, stablecoins, token accounts e taxas
- Verificar pagamentos - confirmar um pagamento no servidor antes de concluir um pedido
- Enviar pagamentos - pagamentos e transferências a partir do seu próprio backend
- Prontidão para produção - antes de movimentar dinheiro real
Is this page helpful?