Solana Pay

Commerce Kit şu anda beta aşamasındadır. API'ler kararlı sürümden önce değişebilir. Ek ayrıntılar için Commerce Kit belgelerine bakın.

Solana Pay, ödeme isteklerini URL olarak kodlamak için standart bir protokoldür. Bu URL'ler bağlantı olarak paylaşılabilir, mobil cüzdanlar için QR kod olarak kodlanabilir veya programatik olarak ödeme işlemleri oluşturmak için kullanılabilir.

@solana-commerce/solana-pay paketi, @solana/kit ile uyumlu URL kodlama/ayrıştırma, QR kod oluşturma ve işlem oluşturma sağlar.

Kurulum

pnpm add @solana-commerce/solana-pay

Ödeme URL'leri oluşturma

Cüzdanların ayrıştırabileceği bir solana: protokol URL'si oluşturmak için encodeURL kullanın:

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 parametreleri

ParametreTürAçıklama
recipientAddressSatıcı cüzdan adresi (zorunlu)
amountbigintLamport veya token alt birimlerinde tutar
splTokenAddressSPL token mint adresi (SOL için atla)
referenceAddress[]Ödeme takibi için benzersiz referans(lar)
labelstringCüzdanda gösterilen satıcı adı
messagestringÖdemeden önce gösterilen mesaj
memostringİşleme eklenen zincir üstü not

SPL token ödemeleri

Stablecoin ödemeleri için token mint adresini belirtin:

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

Referanslarla ödeme takibi

Belirli ödemeleri tanımlamak için benzersiz bir referans oluşturun:

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 kodları oluşturma

Mobil cüzdanlar için taranabilir QR kodları oluşturmak üzere createQR kullanın:

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;

Stilize QR kodları

Logo ve özel stil içeren markalı QR kodları için:

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

İşlem oluşturma

İmzalanmak üzere eksiksiz bir işlem oluşturmak için createTransfer kullanın:

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

SPL token'ları için mint adresini ekleyin:

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'leri ayrıştırma

Solana Pay URL'lerinden veri doğrulayın ve çıkarın:

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?

İçindekiler

Sayfayı Düzenle

Yönetici

© 2026 Solana Vakfı.
Tüm hakları saklıdır.
Bağlanın