Solana Pay

Commerce Kit saat ini dalam versi beta. API mungkin berubah sebelum rilis stabil. Untuk detail tambahan, lihat dokumentasi Commerce Kit.

Solana Pay adalah protokol standar untuk mengenkode permintaan pembayaran sebagai URL. URL ini dapat dibagikan sebagai tautan, dienkode sebagai kode QR untuk dompet mobile, atau digunakan untuk membangun transaksi pembayaran secara programatis.

Paket @solana-commerce/solana-pay menyediakan enkode/parsing URL, pembuatan kode QR, dan pembangunan transaksi—kompatibel dengan @solana/kit.

Instalasi

pnpm add @solana-commerce/solana-pay

Membuat URL pembayaran

Gunakan encodeURL untuk membuat URL protokol solana: yang dapat diparse oleh dompet:

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=...

Parameter URL

ParameterTipeDeskripsi
recipientAddressAlamat dompet merchant (wajib)
amountbigintJumlah dalam lamport atau unit minor token
splTokenAddressAlamat mint token SPL (abaikan untuk SOL)
referenceAddress[]Referensi unik untuk melacak pembayaran
labelstringNama merchant yang ditampilkan di dompet
messagestringPesan yang ditampilkan sebelum pembayaran
memostringMemo on-chain yang dilampirkan ke transaksi

Pembayaran token SPL

Untuk pembayaran stablecoin, tentukan mint token:

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"
});

Pelacakan pembayaran dengan referensi

Buat referensi unik untuk mengidentifikasi pembayaran tertentu:

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

Membuat kode QR

Gunakan createQR untuk membuat kode QR yang dapat dipindai untuk dompet seluler:

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;

Kode QR dengan gaya

Untuk kode QR bermerek dengan logo dan gaya khusus:

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
});

Membangun transaksi

Gunakan createTransfer untuk membangun transaksi lengkap untuk ditandatangani:

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"
}
);

Untuk token SPL, sertakan alamat mint:

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"
}
);

Mengurai URL

Validasi dan ekstrak data dari URL Solana Pay:

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?

Daftar Isi

Edit Halaman

Dikelola oleh

© 2026 Yayasan Solana.
Semua hak dilindungi.
Terhubung