自建收银台还是用平台收银台?一个下午能做完的决定
CNIXPay 的两种接入方式差别只在创建订单时传不传 paymentOptions。这篇讲清楚各自适合谁、各自要做什么,以及怎么从一种平滑切到另一种。
接入 CNIXPay 时第一个要做的决定,就是支付页面由谁来渲染。两种方式在 API 层面只差一个字段,但对你的开发量和控制力影响很大。
两种方式,一个字段
方式 A · 自建收银台:创建订单(POST /orders)时传 paymentOptions,告诉平台你接受哪些「网络 × 币种」。响应里的 paymentOptions 会带上每个收款方式的地址和应付数量,你拿去渲染自己的支付页。
// 请求
{
"merchantOrderNo": "ORDER_001",
"amount": "100.00",
"paymentOptions": [
{ "chain": "tron", "token": "USDT" },
{ "chain": "bsc", "token": "USDC" }
]
}
// 响应(节选)
{
"paymentOptions": [
{ "chain": "tron", "token": "USDT", "address": "TR7NHq...", "amount": "100.00" },
{ "chain": "bsc", "token": "USDC", "address": "0x55d3...", "amount": "100.00" }
]
}
方式 B · 平台收银台:创建订单时不传 paymentOptions。此时不预分配地址(响应里 paymentOptions 为空),只返回 cashierUrl,你把用户跳过去就行。选网络、展示地址和二维码、倒计时、支付结果页,全部由平台页面处理;支付完成跳回你传的 returnUrl。
// 请求
{
"merchantOrderNo": "ORDER_002",
"amount": "50.00",
"returnUrl": "https://shop.example.com/orders/ORDER_002"
}
// 响应(节选)
{
"cashierUrl": "https://pay.example.com/pay/20261017...",
"paymentOptions": []
}
回调、签名、订单状态、查询接口,两种方式完全一样。
各自适合谁
| 自建收银台 | 平台收银台 | |
|---|---|---|
| 开发量 | 需要做支付页:地址、二维码、倒计时、状态轮询 | 零,只需跳转 |
| 品牌与体验 | 完全自定义,用户不离开你的域名 | 平台页面,可跳回你的站 |
| 网络选择 | 你决定给用户哪些选项 | 用户在平台页面自选 |
| 适合 | 已有成熟结算页的产品、App 内嵌支付、对体验要求高 | 快速上线、MVP、运营活动页、没有前端资源 |
| 上线时间 | 一到两天 | 一个下午 |
一个常被忽略的点:自建收银台里,用户看到的收款方式是你下单时决定的。如果用户到了支付页才说“我只有 Polygon 上的 USDC”,你可以调追加收款方式接口(POST /orders/{orderNo}/payment-options)把它加进去,不用关单重建。
自建收银台要做对的几件事
如果选方式 A,支付页至少要处理这些:
- 每个收款方式一张卡片:网络名、币种、地址、二维码、应付数量。不同网络的应付数量可能不同(
paymentOptions[].amount),要用各自的值。 - 地址完整展示 + 一键复制。链上地址大小写敏感(TRON、Solana),不要做任何“美化”。
- 倒计时用
expireTime(Unix 秒)算,不要用本地时间加固定时长。 - 状态轮询:用户停留在支付页时,每 5–10 秒调一次你自己的后端,后端再查询订单或读回调落库的状态。不要让前端直接调 CNIXPay。
- “我已付款”按钮:点击后立即触发一次查询,给用户即时反馈。
这些事情平台收银台已经替你做了——这也是它“一个下午”的原因。
从平台收银台切到自建
很多团队的路径是:先用平台收银台上线验证业务,跑顺了再自建。切换成本很低,因为后端逻辑不变:
- 创建订单时加上
paymentOptions; - 用响应的
paymentOptions渲染页面; - 回调处理器一行不改。
甚至可以按订单混用:某些渠道传 paymentOptions 走自建,某些渠道不传走平台收银台,都在同一个应用下。
建议
- 先上线再优化。 没有特殊体验要求的话,从平台收银台开始,用真实小额订单把回调、幂等、对账跑通。
- 有 App 或对品牌一致性有要求,直接自建。 一到两天的开发量换来完全可控的体验,值得。
- 无论哪种,回调处理器都一样写。 验签、幂等、只在
paid履约、超时主动查询——见 回调验签与幂等。
字段细节见 接入指南 · 创建订单。