Maksuvirrat
@solana-commerce/headless-paketti tarjoaa kehyksestä riippumattomia funktioita
kaupallisten maksuvirrtojen rakentamiseen. Nämä työkalut auttavat luomaan
maksupyyntö- objekteja, generoimaan Solana Pay -URL-osoitteita ja tarkistamaan
on-chain-maksuja. Paketti on suunniteltu toimimaan missä tahansa
JavaScript-ympäristössä: React, Vue, Svelte, vanilla JS, Node.js tai
serverless-funktioissa.
Asennus
pnpm add @solana-commerce/headless
Maksupyyntöfunktiot
Nämä funktiot luovat standardoituja maksupyyntö-objekteja erilaisiin kauppamalleihin. Ne eivät suorita mitään lohkoketjuoperaatioita—ne vain jäsentävät dataa käytettäväksi lompakoissa, Solana Pay -URL-osoitteissa tai mukautetuissa maksukäyttöliittymissä.
createBuyNowRequest()
Luo standardoidun maksupyynnön yksittäisen tuotteen ostoa varten.
function createBuyNowRequest(recipient: string,product: any,options?: {memo?: string;label?: string;message?: string;}): PaymentRequest;
Parametrit
-
recipient(string, pakollinen) - Kauppiaan lompakko-osoite (base58-koodattu Solana-julkinen avain), joka vastaanottaa maksun. -
product(any, pakollinen) - Tuote-objekti, joka sisältää:price(numero, pakollinen) - Tuotteen hinta. Yksikkö riippuu kontekstista (esim. lamportit SOL:lle, pienimmät yksiköt tokeneille).currency(merkkijono, pakollinen) - Maksuvaluutta. Voi olla'SOL'tai token- mint-osoite.name(merkkijono, pakollinen) - Tuotteen nimi, käytetään oletusmemona/nimiönä, jos ei anneta.- Lisäkentät (id, kuvaus, kuva jne.) välitetään edelleen
products-taulukossa.
-
options(objekti, valinnainen) - Mukautusasetukset:memo(merkkijono) - On-chain-memo transaktiolle. Oletus:"Purchase: {product.name}".label(merkkijono) - Näyttönimiö maksupyynnölle (käytetään Solana Pay:ssä). Oletus:product.name.message(merkkijono) - Onnistumisviesti, joka näytetään maksun jälkeen. Oletus:"Thank you for purchasing {product.name}!".
Palautusarvo
PaymentRequest-objekti, joka sisältää:
recipient- Kauppiaan lompakko-osoiteamount- Tuotteen hinta (kopioituproduct.price:sta)currency- Maksuvaluutta (kopioituproduct.currency:sta)products- Taulukko, joka sisältää yhden tuotteenmemo- Transaktiomemo (asetus tai oletus: "Purchase: (product.name)")label- Maksun nimiö (asetus tai oletus: "product.name")message- Onnistumisviesti (asetus tai oletus: "Thank you for purchasing (product.name)!")
Esimerkki:
const payment = createBuyNowRequest("merchant-wallet-address",{id: "prod_123",name: "Premium Subscription",price: 50000000, // 0.05 SOL in lamportscurrency: "SOL"},{label: "Premium Subscription",message: "Thank you for subscribing!"});
createCartRequest()
Luo maksupyynnön usealle tuotteelle ostoskorissa.
function createCartRequest(recipient: string,products: any[],options?: {memo?: string;label?: string;message?: string;currency?: string;}): PaymentRequest;
Parametrit
-
recipient(string, pakollinen) - Kauppiaan lompakko-osoite, joka vastaanottaa maksun. -
products(any[], pakollinen) - Tuoteobjektien taulukko. -
options(object, valinnainen) - Mukautusasetukset:currency(string) - Koko ostoskorin maksuvaluutta.memo(string) - Lohkoketjumuistiinpano. Oletusarvo:"Cart purchase (products.length items)".label(string) - Maksun tunniste. Oletusarvo:"Cart Checkout".message(string) - Onnistumisviesti. Oletusarvo:"Thank you for your purchase!".
Palautusarvo
PaymentRequest-objekti, joka sisältää:
recipient- Kauppiaan lompakko-osoiteamount- Kaikkien tuotehintojen summa (products.reduce((sum, p) => sum + p.price, 0))currency- Maksuvaluutta (asetuksista tai undefined)products- Tuotteiden taulukkomemo,label,message- Asetusarvot tai oletusarvot
Esimerkki:
const cart = createCartRequest("merchant-wallet-address",[{ id: "1", name: "Product A", price: 25 },{ id: "2", name: "Product B", price: 15 },{ id: "3", name: "Product C", price: 10 }],{currency: "USDC",label: "My Store Checkout",message: "Thank you for your order!"});// cart.amount === 50 (sum of prices)
createTipRequest()
Luo maksupyynnön juomarahoja tai lahjoituksia varten käyttäjän määrittelemällä summalla.
function createTipRequest(recipient: string,amount: number,options?: {currency?: string;memo?: string;label?: string;message?: string;}): PaymentRequest;
Parametrit
-
recipient(string, pakollinen) - Juomarahan vastaanottajan lompakko-osoite (sisällöntuottaja, striimaaja, hyväntekeväisyys jne.). -
amount(number, pakollinen) - Juomarahan määrä. Yksikkö riippuu valuutasta (lamportit SOL:lle, pienimmät yksiköt tokeneille). -
options(object, valinnainen) - Mukautusasetukset:currency(string) - Maksuvaluutta. Oletusarvo: undefined (käsitellään tyypillisesti SOL:na kuluttajien toimesta).memo(string) - Lohkoketjumuistiinpano. Oletusarvo:"Thank you for your support!".label(string) - Maksun tunniste. Oletusarvo:"Tip".message(string) - Onnistumisviesti. Oletusarvo:"Thanks for the tip!".
Palautusarvo
PaymentRequest-objekti, joka sisältää:
recipient- Juomarahan vastaanottajan lompakko-osoiteamount- Juomarahan määräcurrency- Maksuvaluutta (asetuksista tai undefined)memo,label,message- Asetusarvot tai oletusarvot
Esimerkki:
const tip = createTipRequest("creator-wallet-address",5_000_000, // 0.005 SOL in lamports{currency: "SOL",label: "Tip for Content Creator",message: "Thanks for the support!"});
Maksun vahvistusfunktiot
Nämä funktiot ovat vuorovaikutuksessa Solanan kanssa transaktioiden
vahvistamiseksi ja vahvistusten odottamiseksi. Ne vaativat Solana RPC -asiakkaan
gill-kirjastosta.
verifyPayment()
Vahvistaa, että transaktio on olemassa ketjussa ja validoi valinnaisesti maksun summan, vastaanottajan ja tokenin.
async function verifyPayment(rpc: SolanaClient["rpc"],signatureString: string,expectedAmount?: number,expectedRecipient?: string,expectedMint?: string): Promise<PaymentVerificationResult>;
Parametrit
-
rpc(SolanaClient['rpc'], pakollinen) - RPC-asiakasgill-kirjastosta. Luo käyttämälläcreateSolanaClient(rpcUrl).rpc. -
signatureString(string, pakollinen) - Vahvistettava transaktioallekirjoitus (base58-koodattu). -
expectedAmount(number, valinnainen) - Odotettu maksusumma validointia varten. Yksikön tulee vastata valuuttaa:- SOL:lle: lamportit (1 SOL = 1 000 000 000 lamportia)
- SPL-tokeneille: tokenin desimaaleihin perustuvat pienimmät yksiköt (esim. USDC käyttää 6 desimaalia)
Jos ei anneta, summan validointi ohitetaan.
-
expectedRecipient(string, valinnainen) - Odotettu vastaanottajan lompakko-osoite. Jos annetaan (yhdessäexpectedAmount:n kanssa), funktio validoi, että vastaanottaja on saanut vähintään tämän summan. Jos ei anneta, validointi ohitetaan. -
expectedMint(string, valinnainen) - SPL-tokenin mint-osoite. Vaaditaan vain SPL-tokenisiirroissa. Jos ei anneta, funktio olettaa SOL-siirron.
Palautusarvo
Promise<PaymentVerificationResult>-objekti:
interface PaymentVerificationResult {verified: boolean; // True if payment is validsignature?: string; // Transaction signature (echoed back)amount?: number; // Expected amount (echoed back)recipient?: string; // Expected recipient (echoed back)error?: string; // Error message if verification failed}
Vahvistuslogiikka
Funktio suorittaa nämä tarkistukset:
-
Allekirjoituksen validiteetti: Tarkistaa, että allekirjoitus on kelvollinen.
-
Transaktion olemassaolo: Hakee transaktion käyttämällä
rpc.getTransaction():ia. Jos ei löydy, palauttaaverified: false. -
Vahvistustila: Tarkistaa, että transaktio on saapunut ketjuun.
-
SOL-siirron validointi (jos
expectedRecipientjaexpectedAmountannettu, eikäexpectedMint:ia ole):- Löytää vastaanottajan tilin indeksin transaktiossa
- Vertaa
preBalances:ia japostBalances:ia saldon muutoksen laskemiseksi - Vahvistaa, että muutos on vähintään
expectedAmount
-
SPL-tokenin siirron validointi (jos
expectedMinton annettu):- Johtaa vastaanottajan Associated Token Account (ATA) -tilin sekä Token Program- että Token-2022 Program -ohjelmille
- Tarkistaa
postTokenBalances:sta vastaavan ATA:n, jolla on odotettu mint - Varmistaa, että tokenin määrä on vähintään
expectedAmount
Turvallisuusnäkökohdat
- Asiakaspuolen varmennus: Tämä funktio hakee transaktiotiedot RPC:stä. Älä paljasta RPC-URL-osoitettasi asiakkaalle.
- Viimeistely: Funktio tarkistaa vahvistetut transaktiot, mutta arvokkaiden
maksujen kohdalla harkitse
finalized-tilaan odottamista.
Esimerkki:
import { verifyPayment } from "@solana-commerce/headless";import { createSolanaClient } from "gill";const client = createSolanaClient({urlOrMoniker: "mainnet"});const result = await verifyPayment(client.rpc,"transaction-signature-here",50_000_000, // 0.05 SOL in lamports"merchant-wallet-address"// No mint = SOL transfer);if (result.verified) {console.log("Payment confirmed!");} else {console.error("Verification failed:", result.error);}
waitForConfirmation()
Kyselee lohkoketjua, kunnes transaktio saavuttaa vahvistetun tai viimeistellyn tilan, tai aikakatkaisu tapahtuu.
async function waitForConfirmation(rpc: SolanaClient["rpc"],signatureStr: string,timeoutMs?: number): Promise<boolean>;
Parametrit
-
rpc(SolanaClient['rpc'], pakollinen) - RPC-asiakasgill:sta. -
signatureStr(string, pakollinen) - Transaktioallekirjoitus, jota odotetaan. -
timeoutMs(number, valinnainen) - Maksimiaika odottaa millisekunteina. Oletus:30000(30 sekuntia).
Palautusarvo
Promise<boolean>- Palauttaatrue, jos transaktio saavuttaaconfirmed- taifinalized-tilan aikakatkaisun sisällä, muutenfalse.
Esimerkki:
import { waitForConfirmation } from "@solana-commerce/headless";import { createSolanaClient } from "gill";const client = createSolanaClient({urlOrMoniker: "mainnet"});// After sending transactionconst signature = await wallet.sendTransaction(transaction);// Wait for confirmation (30 second timeout)const confirmed = await waitForConfirmation(client.rpc, signature, 30000);if (confirmed) {console.log("Transaction confirmed!");} else {console.log("Timeout - transaction not confirmed within 30 seconds");}
Solana Pay -funktiot
Nämä funktiot luovat Solana Pay -URL-osoitteita ja tyyliteltyjä QR-koodeja mobiililompakon skannausta varten.
createSolanaPayRequest()
Luo Solana Pay -URL-osoitteen ja tyylitellyn QR-koodin.
async function createSolanaPayRequest(request: TransferRequestURLFields,options: SolanaPayRequestOptions): Promise<{ url: URL; qr: string }>;
Parametrit
-
request(TransferRequestURLFields, pakollinen) - Solana Pay -siirtopyyntökentät:recipient- Vastaanottajan julkinen avain (käytäcreateRecipient(address)@solana-commerce/solana-pay:sta)amount- (valinnainen) Maksun määrä pienimmissä yksiköissä (lamportit SOL:lle)splToken(valinnainen) - SPL-tokenin mint-julkinen avain (käytäcreateSPLToken(address))reference(valinnainen) - Viitejulkinen avain seurantaa vartenlabel(valinnainen) - Kauppiaan nimimessage(valinnainen) - Onnistumisviestimemo(valinnainen) - Lohkoketjumuistiinpano
-
options(SolanaPayRequestOptions, pakollinen) - QR-koodin tyylivalinnat:size(numero) - QR-koodin leveys/korkeus pikseleinä. Oletus:256.background(merkkijono) - Taustaväri (hex/rgb). Oletus:'white'.color(merkkijono) - QR-koodin väri (hex/rgb). Oletus:'black'.margin(numero) - Marginaali QR-koodin ympärillä moduuleina.errorCorrectionLevel('L' | 'M' | 'Q' | 'H') - Virheenkorjaustaso. Korkeammat tasot sietävät enemmän vaurioita, mutta luovat tiheämpiä koodeja.logo(merkkijono) - Logokuvan URL upotettavaksi QR-koodin keskelle.logoSize(numero) - Logon koko prosentteina QR-koodin koosta.logoBackgroundColor(merkkijono) - Taustaväri logon takana.logoMargin(numero) - Marginaali logon ympärillä.dotStyle('dots' | 'rounded' | 'square') - QR-koodin moduulien muoto.cornerStyle('square' | 'rounded' | 'extra-rounded' | 'full-rounded' | 'maximum-rounded') - Kulmamerkkien muoto.
Palautusarvo
Promise, joka ratkaisee objektiksi:
url(URL) - Solana Pay -URL (esim.solana:recipient?amount=10&spl-token=...)qr(merkkijono) - Base64-koodattu data-URL QR-koodikuvasta (käytä<img src={qr} />-attribuuttina)
Esimerkki:
import {createSolanaPayRequest,createRecipient,createSPLToken} from "@solana-commerce/solana-pay";const payment = await createSolanaPayRequest({recipient: createRecipient("merchant-wallet-address"),amount: 10_000_000, // 0.01 SOL in lamportssplToken: createSPLToken("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"), // USDClabel: "My Store",message: "Thank you for your purchase!"},{size: 400,background: "#FFFFFF",color: "#000000",logo: "/logo.png",logoSize: 20,errorCorrectionLevel: "H"});// Display QR codedocument.getElementById("qr").src = payment.qr;console.log(payment.url.toString()); // solana:merchant...?amount=10000000&spl-token=...
Is this page helpful?