General
Solana Pay

Solana Pay

Solana Pay

Solana Pay

Solana Pay 是一个开源支付框架,可在 Solana 上实现即时、几乎零费用的交易。

通过 Shopify 集成,已被数百万企业信赖,它通过完全消除传统支付中介来彻底改变商业模式。

Solana Pay 通过 URL 标准化支付。无需复杂的钱包集成,您只需创建简单的链接,这些链接可自动兼容所有 Solana 钱包。

核心功能

Solana Pay 的特点包括:

  • 直接结算: 支付直接从客户钱包到商家钱包,可使用 SOL 或任何 SPL 代币。无需银行、处理器或中介抽成。
  • 即时确认: 由于 Solana 的亚秒级结算,资金在确认后立即到账。
  • 通用兼容性: 一次实现即可兼容所有 Solana 钱包和应用程序。

所有功能通过两种基本请求类型实现:

转账请求(简单支付)

用于预设交易的非交互式 URL。所有信息都编码在 URL 中。

 
solana:mvines9iiHiQTysrwkJjGf2gb9Ex9jXJX8ns3qwf2kN?amount=0.01&spl-token=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v

适用场景:电子商务结账、捐赠、订阅、任何简单的代币转账。

交易请求(动态支付)

交互式 URL,可在服务器端构建复杂交易。

钱包向您的服务器发送 HTTP 请求,服务器返回基于实时数据构建的自定义交易。

适用场景:动态定价的 NFT、DeFi 交互、忠诚度计划、复杂的业务逻辑。

集成选项

Solana Pay 提供以下功能:

  • 二维码: 实现即时的线下支付
  • 可分享链接: 适用于任何平台
  • 嵌入式按钮: 提供无缝的结账体验
  • 自定义流程: 支持多方交易、条件访问、部分签名

为什么重要

Solana Pay 用简单的 URL 替代了整个传统支付体系。无需与多个钱包集成或处理复杂的交易流程,您只需创建标准化链接,这些链接可在任何地方自动工作。

**传统支付流程:**客户 → 银行 → 支付处理器 → 您的银行 → 您(几天后,扣除手续费)

**Solana Pay 流程:**客户 → 您(即时,几乎无手续费)

Solana Pay 规范通过用简单、标准化的 URL 替代复杂的钱包集成,从根本上改变了区块链支付方式,这些 URL 可在任何地方使用。

参考

参考是 Solana Pay 技术栈中最重要的部分之一。由于您的后端不会向网络提交交易,而只是返回钱包签名的交易响应,因此没有交易签名可以帮助确定支付是否完成。

reference 是一个唯一的公钥,作为非签名者、非可写账户包含在交易中。它不会影响交易行为,但作为一个跟踪标识符。

流程如下:

  1. 为每个支付请求生成一个唯一的参考(公钥)
  2. 将其作为参数包含在您的交易请求 URL 中
  3. 将其作为非签名账户添加到您的交易指令中
  4. 使用参考跟踪交易

您可以使用 Solana 的 getSignaturesForAddress RPC 方法或 @solana/pay 库的 findReference 辅助工具来定位包含您参考的交易,如下所示:

ts
useEffect(() => {
    // Poll the network for transactions that include the reference address
    const interval = setInterval(async () => {
        try {
            // Find transactions that include the reference address
            const signatureInfo = await findReference(connection, reference, {
                until: mostRecentNotifiedTransaction.current, // Only look for transactions after the most recent one we've found
                finality: "confirmed",
            });
            // Update the most recent transaction with the transaction we just found
            mostRecentNotifiedTransaction.current = signatureInfo.signature;
            // Toast notification
            displayToast(signatureInfo.signature);
        } catch (e) {
            if (e instanceof FindReferenceError) {
                // No transaction found yet, ignore this error
                return;
            }
            console.error("Unknown error", e);
        }
    }, 1000); // Check for new transactions every second
    
    return () => {
        clearInterval(interval);
    };
}, [reference]);

二维码生成

使用 @solana/pay 库将任何交易请求转换为可扫描的二维码:

ts
import { createQR, encodeURL, TransactionRequestURLFields } from '@solana/pay'; 
 
const urlParams: TransactionRequestURLFields = {
  link: new URL("https://yourapi.com/pay"),
};
const solanaUrl = encodeURL(urlParams);
 
const qr = createQR(
  solanaUrl,
  400,
  "transparent"
);
Blueshift © 2025Commit: 0ce3b0d
Blueshift | Solana Pay | Introduction