De Commerce Kit bevindt zich momenteel in bèta. API's kunnen veranderen voor de stabiele release. Voor meer details, zie de Commerce Kit documentatie.
Solana Pay is een standaardprotocol voor het coderen van betalingsverzoeken als URL's. Deze URL's kunnen worden gedeeld als links, gecodeerd als QR-codes voor mobiele wallets, of gebruikt worden om betalingstransacties programmatisch te bouwen.
Het @solana-commerce/solana-pay pakket biedt URL-codering/parsing, QR-code
generatie en transactiebouw—compatibel met
@solana/kit.
Installatie
pnpm add @solana-commerce/solana-pay
Betalings-URL's aanmaken
Gebruik encodeURL om een solana: protocol-URL te maken die wallets kunnen
parsen:
import { encodeURL } from "@solana-commerce/solana-pay";const url = encodeURL({recipient: address("merchant-wallet-address"),amount: 100000000n, // 0.1 SOL in lamportslabel: "Coffee Shop",message: "Thanks for your order!"});console.log(url.toString());// solana:merchant...?amount=0.1&label=Coffee%20Shop&message=...
URL-parameters
| Parameter | Type | Beschrijving |
|---|---|---|
recipient | Address | Wallet-adres van handelaar (verplicht) |
amount | bigint | Bedrag in lamports of token minor units |
splToken | Address | SPL token mint-adres (weglaten voor SOL) |
reference | Address[] | Unieke referentie(s) voor het volgen van betalingen |
label | string | Handelaarsnaam getoond in wallet |
message | string | Bericht getoond voor betaling |
memo | string | On-chain memo toegevoegd aan transactie |
SPL token-betalingen
Voor stablecoin-betalingen, specificeer de token mint:
import { encodeURL } from "@solana-commerce/solana-pay";const url = encodeURL({recipient: address("merchant-wallet"),amount: 25000000n, // 25 USDC (6 decimals)splToken: USDC_MINT,label: "My Store"});
Betalingen volgen met referenties
Genereer een unieke referentie om specifieke betalingen te identificeren:
import { encodeURL } from "@solana-commerce/solana-pay";import { address, generateKeyPairSigner } from "@solana/kit";const orderReference = (await generateKeyPairSigner()).address;const url = encodeURL({recipient: address(MERCHANT_WALLET_ADDRESS),amount: 500000000n, // 0.5 SOLreference: orderReference,memo: `Order-${Date.now()}`});// Query the blockchain later for transactions containing this reference
QR-codes genereren
Gebruik createQR om scanbare QR-codes te genereren voor mobiele wallets:
import { createQR, encodeURL } from "@solana-commerce/solana-pay";import { address } from "@solana/kit";const url = encodeURL({recipient: address(MERCHANT_WALLET_ADDRESS),amount: 100000000n,label: "Coffee Shop"});const qrCode = await createQR(url.toString(),400, // size in pixels"white", // background"black" // foreground);// Use as image sourcedocument.getElementById("qr").src = qrCode;
Gestileerde QR-codes
Voor QR-codes met branding, logo's en aangepaste styling:
import { createStyledQRCode, encodeURL } from "@solana-commerce/solana-pay";const qr = await createStyledQRCode(url.toString(), {width: 600,margin: 3,color: {dark: "#9945FF", // Solana purplelight: "#FFFFFF"},errorCorrectionLevel: "H",dotStyle: "dots",cornerStyle: "extra-rounded",logo: "/your-logo.png",logoSize: 120});
Transacties bouwen
Gebruik createTransfer om een complete transactie te bouwen voor
ondertekening:
import { createTransfer } from "@solana-commerce/solana-pay";const transaction = await createTransfer(client.rpc,address(SENDER_WALLET_ADDRESS),{recipient: address(MERCHANT_WALLET_ADDRESS),amount: 100000000n, // 0.1 SOLmemo: "Coffee purchase"});
Voor SPL-tokens, voeg het mint-adres toe:
const USDC_MINT = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const transaction = await createTransfer(client.rpc,address(SENDER_WALLET_ADDRESS),{recipient: address(MERCHANT_WALLET_ADDRESS),amount: 25000000n, // 25 USDCsplToken: USDC_MINT,reference: [orderReference],memo: "Order #12345"});
URL's parsen
Valideer en extraheer gegevens uit Solana Pay URL's:
import { parseURL, ParseURLError } from "@solana-commerce/solana-pay";try {const parsed = parseURL("solana:merchant...?amount=1.5&label=Store");console.log(parsed.recipient); // Addressconsole.log(parsed.amount); // 1500000000n (lamports)console.log(parsed.label); // "Store"} catch (error) {if (error instanceof ParseURLError) {console.error("Invalid URL:", error.message);}}
Is this page helpful?