Web3支付API不仅要创建一个收款地址,还要把链上不确定性转换成商户能够处理的稳定状态。好的API会明确区分订单、支付意图、链上交易和结算,并通过幂等与事件机制处理重复请求、节点延迟和回调重试。
用资源模型分离职责
订单代表商业交易,支付意图代表某次具体报价和支付条件,链上交易记录实际广播结果,结算记录商户最终可用资金。一个订单可以因为报价过期或用户切换网络拥有多个支付意图,但最终只能按照业务规则完成一次。
设计清晰的状态机
建议至少区分created、awaiting_payment、detected、confirming、paid、settled、expired和review_required。状态只能按允许路径变化,并记录变化原因与时间。不要把“已在链上看到”直接等同于“商户已结算”,否则容易在重组、错币种或对账异常时产生账务问题。
所有写操作支持幂等
商户创建订单和发起退款时应提供幂等键。服务端在一定周期内对相同商户、接口和幂等键返回同一结果,避免网络超时后重试产生重复订单或重复退款。链上入账还要以链ID、交易哈希和日志索引建立唯一约束。
Webhook必须可验证和重放
回调应包含事件ID、事件类型、创建时间和完整资源数据,并使用密钥进行签名。商户先验证签名和时间窗口,再按事件ID去重。平台需要指数退避重试、回调日志和手动重发能力;商户接口应快速返回成功,把耗时业务放入内部队列。
错误、版本与可观测性
错误响应要提供稳定的错误码、可读说明和请求追踪ID,区分参数错误、余额不足、网络不可用和风险拦截。API版本升级应保持兼容窗口,并为字段废弃提供通知。围绕请求延迟、节点错误、回调成功率和状态停留时间建立监控,才能让支付集成在真实网络波动中保持可维护。
