如何通过 Solana Pay 链接接受 USDC
使用 Cosmos Pay 时,Solana 上的支付链接就是一个 Solana Pay 转账请求:客户扫描其二维码,或在 Phantom、Solflare 等钱包中打开它,并在钱包中确认这笔 USDC 支付。USDC 直接进入您的钱包,Solana 确认交易后,Cosmos Pay 即将该链接标记为已支付。收取真实资金之前,先在 Devnet 上试一试。

Solana Pay 链接包含什么
Solana Pay 是 Solana 钱包能读取的支付请求标准:一个 solana: 链接或其二维码,包含收款地址、金额、代币和一条消息。
Cosmos Pay 会为每个链接生成一个 reference 密钥。钱包会把它写入交易,Cosmos Pay 则在 Solana 上查找该密钥,将付款与其链接匹配。只有当交易成功且准确的金额到达您的地址时,Cosmos Pay 才会接受这笔付款。
您和客户各需要什么
- 您:一个用于收款的 Solana 地址,已在控制台中添加到您的组织,并通过签名证明属于您。
- 客户:一个能读取 Solana Pay 链接的 Solana 钱包(例如 Phantom 或 Solflare),其中持有 USDC 以及少量用于支付网络费的 SOL。无需 Cosmos Pay 账户。
- 测试时:使用沙箱,那里的链接运行在 Solana Devnet 上。USDC 在那里同样有预设,因此您可以用 Devnet USDC 进行测试。
接受您的第一笔 Solana Pay 支付
切换到沙箱
登录控制台,在顶部选择“沙箱”。在那里创建的链接运行在 Solana Devnet 上,不涉及真实资金。
添加您的 Solana 钱包
在组织设置中,添加用于收款的 Solana 地址,并签署控制台请求签署的内容,以证明该钱包属于您。
创建链接
在“支付”中选择“创建支付链接”,选择 Solana,并将资产改为 USDC(选择器默认为 SOL)。输入金额,或留空由客户自行决定,然后选择您的钱包,如有需要再添加一条消息。
用钱包付款
打开收银台页面,用 Solana 钱包扫描其二维码,或在同一设备上打开链接。在钱包中确认支付,Solana 确认后,收银台即变为“已支付”。
在服务器上确认
在控制台中添加 Webhook 端点。支付获得确认后,Cosmos Pay 会发送使用 HMAC-SHA256 签名的 PAYMENT_INTENT_SUCCEEDED。请在收到该事件时交付订单。
切换到生产环境
选择“生产环境”,并创建生产 API 密钥(以 prod_ 开头)。链接现在运行在 Solana 主网上,USDC 在那里有自己的预设。
从服务器创建链接
使用支付 API 调用 POST /v1/payment-intents/pay,将 chain 设为 solana,以您的地址作为目标地址;收取 USDC 时,资产代码填 USDC,并以其铸币地址(mint)作为发行方。使用 TypeScript SDK(2.2 或更高版本)时,向 client.paymentIntents.createPay 传入 chain: 'solana'。
响应中包含链接(其 uri 以 solana: 开头)及其二维码。您可以展示二维码、在客户的钱包中打开链接,或将客户引导至托管收银台:payments.cosmospay.lat 后接链接的 ID。
须知
- 您可以不填金额,由客户自行决定,例如用于捐赠。加收您自己费用的链接必须填写金额。
- 一条最多 300 个字符的消息(例如订单号)会显示在客户的钱包中。
- 如果在支付上加收您自己的费用,链接会变为 Solana Pay 交易请求,在一笔交易中同时向您的钱包和您的收费钱包付款。
- 链接的有效时间有限,收银台会以倒计时显示。如果之后仍有支付到达并获确认,该链接会被标记为已支付。
- Solana 网络费由客户的钱包以 SOL 支付。每笔支付按您套餐的费率计费,与其他所有网络相同。
哪些钱包可以支付 Solana Pay 链接?
任何能读取 Solana Pay 链接的 Solana 钱包,例如 Phantom 或 Solflare。客户扫描二维码或打开链接,然后在钱包中确认支付。
我的客户需要 SOL 吗?
需要,少量即可。除了发送的 USDC 之外,客户的钱包还要以 SOL 支付 Solana 网络费。
USDC 会经过 Cosmos Pay 吗?
不会。在 Solana 上,客户的钱包将 USDC 直接发送到您的地址。Cosmos Pay 通过链接的 reference 密钥在网络上找到这笔付款。
可以不用真实资金测试吗?
可以。在沙箱中并使用测试密钥(dv_)时,链接运行在 Solana Devnet 上,USDC 在那里有预设,收银台也会注明不涉及真实资金。
