Bir USDC ödemesi için Solana Pay QR kodu gösteren, ödemenin ağa ulaşmasını bekleyen ve talep ettiğiniz ödemeyle eşleştiğini kontrol eden bir React bileşeni elde edeceksiniz. Node.js 20+, bir React veya Next.js uygulaması (yeni bir create-next-app uygundur) ve devnet'e ayarlanmış bir mobil cüzdana ihtiyacınız var. İşlem ücretlerini karşılamak için cüzdanı faucet.circle.com adresinden devnet USDC ile, faucet.solana.com adresinden devnet SOL ile fonlayın.
@solana/pay şu anda beta aşamasındadır. Kararlı sürümden önce API'ler değişebilir.
1. Solana Pay'i yükleyin
pnpm add @solana/pay@beta @solana/kit
2. Ödeme QR kodunu ekleyin
Bileşen, sipariş için benzersiz bir referans oluşturur, bunu bir transfer isteği URL'sine kodlar ve URL'yi QR kodu olarak gösterir. Ardından bu referansı içeren bir işlemi izler ve siparişi ödenmiş olarak işaretlemeden önce alıcıyı, tutarı ve token'ı doğrular. MERCHANT_WALLET değerini kontrol ettiğiniz bir adrese ayarlayın:
"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 token birimi cinsindendir, dolayısıyla 1 değeri 1 USDC talep eder. Bunun yerine SOL talep etmek için splToken değerini çıkarın.
3. Ödeme alın
Uygulamanızı çalıştırın, QR kodunu cüzdanınızla tarayın ve ödemeyi onaylayın. İşlem onaylanıp doğrulamadan geçtiğinde bileşen işlem imzasını gösterir. Bu imza makbuzunuzdur: getTransaction ile veya herhangi bir explorer'da sorgulayabilirsiniz.
Tarayıcıda doğrulama bir demo için yeterlidir. Gerçek siparişleri karşılamadan önce ödemeleri sunucunuzda doğrulayın. Bkz. ödemeleri doğrulama.
Sırada ne var
- Solana Pay - transfer istekleri, işlem istekleri ve QR kodu seçenekleri
- Solana'da ödemeler nasıl çalışır - cüzdanlar, stablecoin'ler, token account'lar ve ücretler
- Ödemeleri doğrulayın - bir siparişi yerine getirmeden önce sunucu tarafında ödemeyi onaylayın
- Ödeme gönderin - kendi arka ucunuzdan ödemeler ve transferler
- Üretime hazırlık - gerçek para hareket etmeden önce
Is this page helpful?