Tuloksena saat React-komponentin, joka näyttää Solana Pay -QR-koodin USDC-maksua varten, odottaa maksun saapumista ja tarkistaa, että se vastaa pyytämääsi. Tarvitset Node.js 20+:n, React- tai Next.js-sovelluksen (tuore create-next-app käy hyvin) sekä devnetiin asetetun mobiililompakon. Lataa siihen devnet-USDC:tä osoitteesta faucet.circle.com ja devnet-SOL-tokeneita osoitteesta faucet.solana.com transaktiomaksujen kattamiseksi.
@solana/pay on tällä hetkellä beta-vaiheessa. API-rajapinnat saattavat muuttua ennen vakaata julkaisua.
1. Asenna Solana Pay
pnpm add @solana/pay@beta @solana/kit
2. Lisää maksun QR-koodi
Komponentti luo tilaukselle yksilöllisen viitteen, koodaa sen siirtopyynnön URL-osoitteeseen ja renderöi URL-osoitteen QR-koodiksi. Sen jälkeen se seuraa transaktiota, joka sisältää viitteen, ja validoi vastaanottajan, summan ja tokenin ennen kuin merkitsee tilauksen maksetuksi. Aseta MERCHANT_WALLET osoitteeksi, jota hallitset:
"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 on token-yksikköinä, joten 1 pyytää 1 USDC:tä. Jätä splToken pois, niin pyyntö koskee SOL-tokenia.
3. Vastaanota maksu
Käynnistä sovelluksesi, skannaa QR-koodi lompakollasi ja hyväksy maksu. Kun transaktio vahvistuu ja läpäisee validoinnin, komponentti näyttää transaktion allekirjoituksen. Tämä allekirjoitus on kuittisi: hae se funktiolla getTransaction tai missä tahansa lohkoketjuselaimessa.
Selaimessa tehty validointi riittää demoon. Ennen kuin täytät oikeita tilauksia, validoi maksut palvelimellasi. Katso maksujen vahvistaminen.
Mitä tehdä seuraavaksi
- Solana Pay - siirtopyynnöt, transaktiopyynnöt ja QR-koodin asetukset
- Miten maksut toimivat Solanassa – lompakot, vakaakolikot, token account ja maksut
- Maksujen vahvistaminen – vahvista maksu palvelinpuolella ennen tilauksen täyttämistä
- Maksujen lähettäminen – maksut ja siirrot omasta taustajärjestelmästäsi
- Tuotantovalmius – ennen kuin oikea raha liikkuu
Is this page helpful?