Solana Pay

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 lamports
label: "Coffee Shop",
message: "Thanks for your order!"
});
console.log(url.toString());
// solana:merchant...?amount=0.1&label=Coffee%20Shop&message=...

URL-parameters

ParameterTypeBeschrijving
recipientAddressWallet-adres van handelaar (verplicht)
amountbigintBedrag in lamports of token minor units
splTokenAddressSPL token mint-adres (weglaten voor SOL)
referenceAddress[]Unieke referentie(s) voor het volgen van betalingen
labelstringHandelaarsnaam getoond in wallet
messagestringBericht getoond voor betaling
memostringOn-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 SOL
reference: 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 source
document.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 purple
light: "#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 SOL
memo: "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 USDC
splToken: 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); // Address
console.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?

Inhoudsopgave

Pagina Bewerken

Beheerd door

© 2026 Solana Foundation.
Alle rechten voorbehouden.
Blijf Verbonden