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 lamportslabel: "Coffee Shop",message: "Thanks for your order!"});console.log(url.toString());// solana:merchant...?amount=0.1&label=Coffee%20Shop&message=...
URL parametreleri
| Parametre | Tür | Açıklama |
|---|---|---|
recipient | Address | Satıcı cüzdan adresi (zorunlu) |
amount | bigint | Lamport veya token alt birimlerinde tutar |
splToken | Address | SPL token mint adresi (SOL için atla) |
reference | Address[] | Ödeme takibi için benzersiz referans(lar) |
label | string | Cüzdanda gösterilen satıcı adı |
message | string | Ödemeden önce gösterilen mesaj |
memo | string | İş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 SOLreference: 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 sourcedocument.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 purplelight: "#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 SOLmemo: "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 USDCsplToken: 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); // 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?