如何在网站上接受比特币支付:商户实操指南

想接受比特币支付?对比个人钱包与支付网关,了解确认几次后再发货,以及如何处理币价波动和付款金额不符。

更新于: 阅读约 5 分钟
顾客在托管收银台页面扫描比特币二维码付款

有些顾客宁愿用手里已有的加密货币付款,也不想输入银行卡号,而这种币很多时候就是比特币。如果你想在网站上接受比特币支付,难点并不在于收币,而在于弄清每笔款项对应哪个订单、什么时候发货才安全,以及顾客付错金额时该怎么办。

本文介绍几种可选方案、比特币收银台的实际流程、应该等待几个确认,以及如何应对币价波动和手续费。适合网店、SaaS、主机服务和数字商品等在线业务。

为什么要接受比特币支付?

  • 已经持有 BTC 的顾客:比特币仍是大多数人最先想到的加密货币,提供这个选项可以少一个放弃付款的理由。
  • 没有拒付:已确认的比特币交易无法被付款人的银行撤回,是否退款完全由你决定。
  • 面向全球:任何国家的买家都能付款,不会遇到境外银行卡被拒的问题。
  • 第二条收款通道:即使银行卡收单账户被冻结,订单仍可以通过加密货币继续进来。

当然也有缺点:比特币价格波动大,网络拥堵时手续费会上涨,平均约十分钟才出一个区块,确认速度比 TRON 等网络慢。所以大多数商户会把比特币作为 USDT 等稳定币之外的补充,而不是替代。稳定币部分可以参考我们的USDT 收款指南。

接受比特币支付的三种方式

个人钱包自建支付服务器比特币支付网关
搭建时间几分钟数天:服务器、节点或索引器、持续更新提交商户申请,之后一个 API 调用或付款链接即可
款项与订单匹配手动在区块浏览器核对自动自动,每张账单一个独立地址
付款时的汇率自己计算自动在账单有效期内锁定
订单通知无取决于你的配置向你的服务器发送签名 Webhook
运维无长期由你负责由网关负责
适合谁偶尔几笔手动交易有运维能力的团队希望省心运行的企业

在网站上只贴一个钱包地址,收捐款还可以,但只要两位顾客同时转入相近的金额,你就分不清谁付了哪一单。支付网关的做法是给每张账单分配独立的收款地址。

通过支付网关收比特币的流程

在 mistKET,比特币和平台上其他资产走的是同一套流程:

  1. 后端创建账单:发送一个签名的 API 请求,包含金额、计价货币(USD、EUR、GBP、TRY、RUB 或 AED)和你的订单号,返回收银台链接。也可以在商户后台手动创建账单,再通过聊天或邮件发送链接。
  2. 顾客打开托管收银台:页面显示精确的 BTC 金额、原生 SegWit 地址和二维码。二维码采用标准的 bitcoin: 支付 URI,大多数钱包会自动填好地址和金额。
  3. 汇率锁定:在账单有效期内,BTC 金额保持不变。
  4. 网关发现交易:未确认的交易在内存池(mempool)中就会被识别,顾客立即看到“已收到付款”的提示。
  5. 跟踪确认数:达到所需确认数后,你的服务器会收到经 HMAC-SHA256 签名的 invoice.paid 和 invoice.confirmed Webhook。验证方法见加密货币支付 Webhook 一文。
  6. 余额入账:扣除约定费率后,款项计入你的 BTC 余额,你可以随时申请提现到自己的地址。
注意:在 mistKET,比特币(以及莱特币)按商户单独开通。申请时注明需要比特币以及预计交易量,团队会为你的账户启用。

确认数:什么时候发货才安全?

内存池里的交易已经广播,但还没有被写入区块。在确认之前,它在少数情况下可能被替换或丢弃。每多一个区块叠加在上面,被撤销的可能性就大幅降低。比特币平均约十分钟出一个块,但间隔差异很大。

mistKET 目前在比特币网络上等待两个确认后才将账单标记为已确认。合理的发货规则如下:

你卖什么何时交付
即时交付的数字商品、授权码、充值收到 invoice.confirmed 之后
几天后才发出的实物商品收到 invoice.paid 开始备货,invoice.confirmed 后发货
订阅和主机服务invoice.confirmed 后开通;告知顾客通常需要 10 到 30 分钟

提前告诉顾客比特币确认比刷卡慢。在订单页写上一句话,就能减少大部分“我的订单呢?”的咨询。

币价波动、手续费和金额不符

币价波动

你用法币定价,比如 49 美元,账单按锁定汇率换算成 BTC。之后你持有的是比特币,它的价值还会继续变化。mistKET 的余额按资产分别记账,BTC 收款在你提现之前一直是 BTC。如果不想承担价格风险,可以定期提现并在自己常用的交易所兑换,或者引导不在意币种的顾客使用 USDT。

网络手续费

比特币网络手续费由顾客在转账时支付,以实际到达收款地址的金额为准。从交易所提币的顾客有时会忘记交易所还会扣除提币手续费,导致到账金额不足。收银台页面会提醒这一点,但最好在你自己的付款说明里再强调一次。

少付和多付

  • 少付:到账金额不足时,账单会被标记为少付,顾客可以补足差额,截止时间会相应延长。你也可以为账户设置一个小的容差百分比。
  • 多付:多付的金额会单独标记,但仍算付款成功,是否退还差额由你决定。
  • 延迟付款:计时结束后不久到达的转账,在短暂的宽限期内仍会匹配;更晚到达的会进入人工审核,而不是直接入账。

接入比特币收款的步骤

  1. 申请成为商户:提交网站、业务类型、预计交易量以及需要的资产(包括比特币)。团队会在发放 API 密钥前审核每份申请。
  2. 确定发货规则:根据上面的确认表,写清楚订单何时交付。
  3. 完成对接:用一个签名的 POST 请求创建账单,并处理 Webhook。任何能发 HTTPS 请求并计算 HMAC 的语言都可以;接口说明见 API 文档。不想写代码,也可以直接用后台的付款链接。
  4. 小额测试:自己付一笔真实账单,观察状态从待支付到已支付再到已确认,并检查订单系统是否正确响应。
  5. 写清付款说明:“请在比特币网络上用 BTC 付款,按显示金额足额转账;如从交易所提币,请把提币手续费计算在内。”
  6. 制定提现节奏:按固定周期申请提现到自己的钱包。每笔提现会立即冻结相应余额,审核后发出,并记录交易哈希。

常见错误

  • 所有顾客共用一个地址,导致无法对账。
  • 交易尚未确认就交付即时数字商品。
  • 把加密货币选项藏在收银台最底部。
  • 在错误的网络上收款。转到其他链地址的比特币,网关无法匹配。
  • 忽视 Webhook 失败。记录每次推送,并让处理程序按订单号保持幂等,因为 Webhook 可能会重试。

税务、记账与合规

接受比特币并不意味着可以不顾税法和消费者保护规定。请记录每张账单及其付款时的法币价值;商户后台会显示应收金额、实收金额和交易哈希,方便记账。各国规定差异很大:中国大陆禁止开展虚拟货币相关业务活动,境内企业不能用加密货币收款;土耳其等国家也限制或禁止把加密货币作为支付手段。上线前请确认适用于你业务的法规,并且只销售在你和顾客所在地都合法的商品。

如果想先了解整体思路,可以阅读网站如何接受加密货币支付。

常见问题

如何在网站上接受比特币支付?
使用比特币支付网关:网站创建账单,顾客在带二维码的托管收银台付款,付款确认后你的服务器会收到签名 Webhook。只贴一个钱包地址只适合少量手动交易。
应该等待几个确认?
即时交付的数字商品,应等网关把付款标记为已确认后再交付。mistKET 目前对比特币使用两个确认,通常需要 10 到 30 分钟,具体取决于出块时间。
mistKET 支持比特币吗?
支持。比特币和莱特币可按商户申请开通。此外还支持 TRON、BNB Smart Chain、Ethereum 和 Arbitrum 上的 USDT,以及 TRX、BNB 和 ETH。
顾客少付了 BTC 怎么办?
账单会被标记为少付,顾客可以在延长后的期限内补足差额。你会收到包含应收和实收金额的 Webhook。
比特币会自动换成美元吗?
不会。余额按资产分别记账,BTC 在你申请提现到自己的地址之前一直是 BTC。想降低波动风险,可以定期提现或同时提供 USDT。

相关文章