Pikaopas: vastaanota maksu

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

Is this page helpful?

Sisällysluettelo

Muokkaa sivua
© 2026 Solana Foundation. Kaikki oikeudet pidätetään.