@solana-commerce/solana-pay-paketti tarjoaa täydellisen
Solana Pay -toiminnallisuuden maksukokemuksien
rakentamiseen, yhteensopivana gill- ja
@solana/kit -kirjastojen kanssa. Se
käsittelee URL-osoitteiden koodauksen ja jäsentämisen, QR-koodien generoinnin
mukautetulla tyylillä sekä tapahtumien muodostamisen sekä SOL- että
SPL-rahakesiirroille.
Asennus
pnpm add @solana-commerce/solana-pay
URL-koodaus
encodeURL(fields)
Luo Solana Pay -URL-osoitteen, joka noudattaa
Solana Pay -spesifikaatiota. Tämä funktio
generoi solana:-protokollan URL-osoitteita, jotka voidaan jakaa linkkeinä tai
koodata QR-koodeiksi, jotta mobiililompakot voivat skannata ne.
Parametrit
fields(TransferRequestURLFields | TransactionRequestURLFields) - Maksu-URL:n konfiguraatio
TransferRequestURLFields
Käytetään yksinkertaisiin maksupyyntöihin (suorat siirrot):
-
recipient(Address, vaaditaan) - Kauppiaan lompakko-osoite (base58-koodattu julkinen avain), joka vastaanottaa maksun. Voi olla merkkijono taiAddress-tyyppigill:stä. -
amount(bigint, valinnainen) - Maksun määrä lamporteissa (atomiyksikköinä). SOL:lle 1 SOL = 1 000 000 000 lamportia (9 desimaalia). SPL-tokeneille käytä tokenin desimaalitarkkuutta (esim. USDC käyttää 6 desimaalia, joten 1 USDC = 1 000 000). -
splToken(Address, valinnainen) - SPL-tokenin mint-osoite tokenmaksuille. Jos jätetään pois, maksun oletetaan olevan SOL:ssa. -
reference(Address | Address[], valinnainen) - Yksilöllinen viiteosoite/osoitteet, joita käytetään maksujen seuraamiseen. Generoi käyttämällägenerateKeyPairSigner().address-funktiota. Viite lisätään vain luku -tilinä tapahtumaan, mikä mahdollistaa maksujen hakemisen tätä viitettä käyttäen. -
label(string, valinnainen) - Ihmisluettava kauppiaan tai sovelluksen nimi, joka näytetään käyttäjälle hänen lompakossaan (esim. "Kahvila", "Kauppani"). -
message(string, valinnainen) - Käyttäjälle ennen maksua näytettävä viesti (esim. "Kiitos ostoksestasi!", "Kiitos erinomaisesta palvelusta"). -
memo(string, valinnainen) - Tapahtumaan liitetty ketjussa oleva muistiinpano. Tallennetaan pysyvästi Solanaan. Hyödyllinen tilausnumeroille, laskujen numeroille tai muulle maksun metatiedolle.
TransactionRequestURLFields
Käytetään monimutkaisiin maksupyyntöihin (mukaan lukien ohjeet):
-
link(URL, pakollinen) - Linkki tapahtumaan (Link). Jos URL sisältää kyselyparametreja, se on URL-koodattava. -
label(string, valinnainen) - Ihmisluettava kauppiaan tai sovelluksen nimi, joka näytetään käyttäjälle hänen lompakossaan (esim. "Kahvila", "Oma Kauppa"). -
message(string, valinnainen) - Käyttäjälle ennen maksua näytettävä viesti (esim. "Kiitos ostoksestasi!", "Kiitos erinomaisesta palvelusta").
Miten se toimii
Funktio suorittaa useita toimintoja muodostaakseen kelvollisen Solana Pay -URL-osoitteen:
-
Protokollaetuliite - Luo URL-osoitteen
solana:-protokollan mukaisesti (samankaltainen kuinmailto:taibitcoin:) -
Vastaanottaja polkuna - Käyttää vastaanottajan base58-osoitetta URL-polkuna (esim.
solana:merchantWalletAddress123...) -
Summan muuntaminen - Muuntaa bigint-lamport-määrän desimaalilukumuotoon ilman liukulukutarkkuusongelmia.
-
Kyselyparametrit - Liittää kaikki valinnaiset kentät ja viittaukset URL-koodattuina kyselyparametreina
Palautusarvo
URL-objekti solana:-protokollalla, joka voidaan:
- Muuntaa merkkijonoksi käyttämällä
.toString()jakamista varten - Välittää funktiolle
createQR()QR-koodin luomiseksi - Käyttää suoraan anchor-tageissa:
<a href={url.toString()}>Pay with Solana</a>
Esimerkki: Perusmaksu
import { encodeURL } from "@solana-commerce/solana-pay";import { address } from "gill";const url = encodeURL({recipient: address("merchantWalletAddress123..."),amount: 100000000n, // 0.1 SOL (100 million lamports)label: "Coffee Shop",message: "Thanks for your order!"});console.log(url.toString());// solana:merchantWalletAddress123...?amount=0.1&label=Coffee%20Shop&message=Thanks%20for%20your%20order!
Esimerkki: SPL-tokeni-maksu
import { encodeURL } from "@solana-commerce/solana-pay";import { address } from "gill";const usdcMint = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const url = encodeURL({recipient: address("merchantWallet..."),amount: 25000000n, // 25 USDC (6 decimals)splToken: usdcMint,label: "USDC Payment",message: "Pay with USDC stablecoin"});
Esimerkki: Maksu seurannalla
Käytä viitteitä tiettyjen maksujen tunnistamiseen:
import { encodeURL } from "@solana-commerce/solana-pay";import { address } from "gill";import { Keypair } from "@solana/web3.js";// Generate unique reference for this orderconst orderReference = (await generateKeyPairSigner()).address;const url = encodeURL({recipient: address("merchantWallet..."),amount: 500000000n, // 0.5 SOLreference: orderReference,memo: `Order-${Date.now()}`, // On-chain memolabel: "E-commerce Store",message: "Complete your purchase"});// Later, query the blockchain for transactions containing this reference// to verify payment was made
URL-jäsennys
parseURL(url)
Purkaa ja validoi Solana Pay -URL:n ja poimii kaikki maksuparametrit. Tämä funktio suorittaa validoinnin ja muuntaa summat desimaalilukumerkkijonoista takaisin bigint-muotoisiksi lamporteiksi.
Parametrit
url(string | URL) - Jäsennettävä Solana Pay -URL. Voi olla merkkijono tai URL-objekti.
Palautusarvo
Jäsennetty TransferRequestURLFields- tai
TransactionRequestURLFields-objekti.
Esimerkki: Jäsennys ja validointi
import { parseURL, ParseURLError } from "@solana-commerce/solana-pay";try {const parsed = parseURL("solana:merchant123...?amount=1.5&label=Store&reference=ref123...");console.log(parsed.recipient); // Address objectconsole.log(parsed.amount); // 1500000000n (1.5 SOL in lamports)console.log(parsed.label); // "Store"console.log(parsed.reference); // [Address]// Convert back to human-readable formatconst solAmount = Number(parsed.amount) / 1e9;console.log(`Payment of ${solAmount} SOL`);} catch (error) {if (error instanceof ParseURLError) {console.error("Invalid Solana Pay URL:", error.message);}}
Esimerkki: URL-validointifunktio
import { parseURL, ParseURLError } from "@solana-commerce/solana-pay";function validateSolanaPayURL(urlString: string): {valid: boolean;error?: string;data?: any;} {try {const parsed = parseURL(urlString);// Additional business logic validationif (parsed.splToken) {return {valid: false,error: "Only SOL payments are supported"};}if (parsed.amount && parsed.amount < 1000000n) {return {valid: false,error: "Amount too small (minimum 0.001 SOL)"};}// etc.return {valid: true,data: {recipient: parsed.recipient.toString(),amount: parsed.amount ? Number(parsed.amount) / 1e9 : undefined,token: parsed.splToken?.toString()}};} catch (error) {return {valid: false,error: error instanceof ParseURLError ? error.message : "Unknown error"};}}
QR-koodin luominen
createQR(url, size, background, color)
Luo Solana Pay -URL:ille optimoidun SVG-muotoisen QR-koodin. Funktio tuottaa tyyliteltyjä, korkealaatuisia QR-koodeja pyöristetyillä kulmilla ja mukautettavilla väreillä.
Parametrit
url(string | URL) - QR-koodiin koodattava Solana Pay -URLsize(number, oletus:512) - Leveys ja korkeus pikseleinäbackground(string, oletus:'white') - Taustaväri (hex tai nimetty väri). Tulisi olla vaalea lompakkoyhteensopivuuden vuoksi.color(string, oletus:'black') - Edustalla oleva/pisteiden väri (hex tai nimetty väri). Tulisi olla tumma kontrastin vuoksi.
createStyledQRCode(url, options)
Palautusarvo
Promise<string> - SVG-merkintä merkkijonona, joka voidaan:
- Asettaa
img-elementin src-attribuutiksi:<img src={qrCode} /> - Tallentaa tiedostoon
Esimerkki
import { createQR, encodeURL } from "@solana-commerce/solana-pay";import { address } from "gill";async function generatePaymentQR() {const url = encodeURL({recipient: address("merchant..."),amount: 100000000n, // 0.1 SOLlabel: "Coffee Shop"});const qrCode = await createQR(url.toString(),400, // 400x400 pixels"white", // White background"black" // Black foreground);// Display in browserdocument.getElementById("qr-container").innerHTML = qrCode;// Or use as image sourcedocument.getElementById("qr-image").src = qrCode;}
Esimerkki: Brändätty QR-koodi
import { createStyledQRCode, encodeURL } from "@solana-commerce/solana-pay";import { address } from "gill";async function createBrandedQR() {const url = encodeURL({recipient: address("merchant..."),amount: 25000000n, // 25 USDC (6 decimals)splToken: address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),label: "Coffee Shop",message: "Scan to pay with USDC"});const qr = await createStyledQRCode(url.toString(), {width: 600,margin: 3,color: {dark: "#9945FF", // Solana purplelight: "#F5F5DC" // Beige},errorCorrectionLevel: "H", // Higher correction for logodotStyle: "dots", // Circular dotscornerStyle: "extra-rounded",logo: "/coffee-logo.png", // Your logologoSize: 120,logoBackgroundColor: "#FFFFFF", // White padding behind logologoMargin: 10});return qr; // SVG string}
Transaktioiden rakentaminen
createTransfer(rpc, sender, fields)
Rakentaa täydellisen Solana-transaktioviestin maksunsiirroa varten. Tämä funktio
havaitsee automaattisesti, luodaanko SOL- vai SPL-token-siirto
splToken-parametrin perusteella, ja rakentaa kaikki tarvittavat ohjeet.
Funktio asettaa transaktion lohkohashin elinajan käyttäen viimeisintä
lohkohashia RPC-asiakasohjelmasta ja palauttaa valmiin, allekirjoittamattoman
transaktion, joka on valmis allekirjoitettavaksi ja lähetettäväksi RPC:lle
(tyyppi TransactionMessageWithBlockhashLifetime, yhteensopiva Solana
Kit/Gill:n kanssa).
Parametrit
-
rpc(Rpc<SolanaRpcApi>) - Solana RPC -asiakasohjelma osoitteestagill. Luo komennollacreateSolanaClient(rpcUrl).rpc. -
sender(Address) - Maksajan lompakon osoite. Täytyy olla rahoitettu tili, joka allekirjoittaa transaktion. -
fields(CreateTransferFields) - Siirron määritykset:recipient(Address, pakollinen) - Kohdelompakon osoiteamount(bigint, pakollinen) - Määrä lamporteissa (SOL) tai tokenin atomiyksiköissä (SPL)splToken(Address, valinnainen) - SPL-tokenin mint-osoite. Jos jätetään pois, luodaan SOL-siirto.reference(Address | Address[], valinnainen) - Viiteosoite(et) seurantaa vartenmemo(string, valinnainen) - Ketjumuistio-teksti
Palautusarvo
Promise<TransactionMessageWithBlockhashLifetime> - Täydellinen
transaktioviesti, joka sisältää:
- Versio 0 -muodon (tukee osoitehakutaulukoita)
- Lohkohashin elinajan (transaktio vanhenee ~60 sekunnin jälkeen)
- Kaikki tarvittavat ohjeet (siirto + valinnainen muistio)
- Valmis allekirjoitettavaksi lompakolla ja lähetettäväksi RPC:lle
Virheiden käsittely
Heittää poikkeuksen CreateTransferError tietyillä viesteillä:
"sender not found"- Lähettäjän tiliä ei ole olemassa"recipient not found"- Vastaanottajan tiliä ei ole olemassa
Esimerkki: SOL-maksu
import { createTransfer } from "@solana-commerce/solana-pay";import { createSolanaClient } from "gill";import { address } from "gill";const rpc = createSolanaClient("https://api.mainnet-beta.solana.com").rpc;// Build SOL transfer transactionconst txMessage = await createTransfer(rpc, address("sender-wallet-address"), {recipient: address("merchant-wallet-address"),amount: 100000000n, // 0.1 SOLmemo: "Coffee purchase"});// Transaction is ready to sign and send// (wallet signing is handled separately)console.log("Transaction ready:", txMessage);
Esimerkki: USDC-maksu
import { createTransfer } from "@solana-commerce/solana-pay";import { createSolanaClient } from "gill";import { address } from "gill";const rpc = createSolanaClient("https://api.mainnet-beta.solana.com").rpc;const usdcMint = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const txMessage = await createTransfer(rpc, address("sender-wallet"), {recipient: address("merchant-wallet"),amount: 25000000n, // 25 USDC (6 decimals)splToken: usdcMint,reference: [address("unique-ref-123...")],memo: "Order #12345"});
Is this page helpful?