客户多付、少付或发错链了怎么办
了解客户少付、多付、发错资产、发错链或迟到付款时,StableOps 如何记录异常付款尝试、为何支付订单不会自动完成,以及商户应如何核对实际到账并选择补款、人工入账或退款。文档同时说明哪些订单可以使用退款接口,哪些错付资金必须通过商户钱包人工处理。
StableOps 只有在转账与订单在每一个键上都完全匹配时,才会把订单推进到 detected:
- 收款地址,并按组织与环境隔离
- 链与资产
- 金额,按代币精度换算成最小单位后比较
匹配时订单还必须处于 created 状态。只要其中任意一项不同,订单就不会推进,也不会发送 payment.detected,而是继续等待,直到过期。
如果 StableOps 支持并正在扫描转账实际发生的链、资产和地址,转账仍会被保存为链上事件,并记录一条异常付款尝试。例如,金额不一致会标记为 amount_mismatch,过期后到账会标记为 late_payment。发生在未支持或未扫描网络上的转账不一定会出现在 StableOps 中,必须通过相应网络的区块浏览器或商户钱包调查。
少付或多付
金额与你请求的 amount 不完全相等的转账都不会匹配订单。StableOps 不会合并多笔转账、部分履约,也不会接受“差不多”的金额。对一笔 10.00 的订单而言,9.99 和 10.01 都算未命中。
应对方式:
- 始终向客户展示
paymentInstructions中的精确金额,并禁止其修改。很多钱包允许用户自行输入金额,这是订单卡住的常见原因。 - 如果客户仍然少付或多付,让原订单按计划过期,再根据商户政策决定退款、要求补款或人工入账。
- 如果要求补款,不要期待两笔金额不同的转账自动合并并完成原订单。应创建新的付款请求,或在商户账本中经过审批后人工合并处理结果。
发错链或发错资产
订单只会监听你在 acceptedAssets 中传入的 (chain, asset) 组合。转账发生在订单未接受的链或资产上,或者客户把 USDT 发给只接受 USDC 的订单时,都不能匹配原订单。
在 EVM 网络上,同一个 0x… 地址可能存在于多条链。资金即使到达相同文字形式的地址,只要实际网络与付款指令不同,仍然属于发错链,不能完成订单。
只有支持资产表中列出的 (chain, asset) 组合才可能被接受。表外组合会在创建订单时被拒绝,StableOps 也不保证能够发现发生在未支持网络或资产上的转账。
退款接口的适用边界
StableOps 退款接口只适用于已经 finalized 的付款。此类订单具有一笔精确匹配的原始支付事件,可以创建独立的非托管退款请求,再由商户钱包签名并广播退款交易。
少付、多付、发错链、发错资产或过期后到账的转账没有让原订单进入 finalized,因此不能针对该订单调用退款接口。请保留原订单及异常付款记录,通过商户自己的资金工具处理实际到账资金,并把退款、补款或人工入账记为独立且经过审批的异常操作。完整流程见少付、多付或发错网络的处理方法。
找回打错的资金
找回资金需要你自行操作。StableOps 不持有你的私钥,也不会替你签署或广播资金交易。
- 使用 BYO 地址时,资金通常到达你控制的地址。先确认商户钱包确实支持转账实际发生的链与资产,再决定退款或人工入账。
- 不要直接把原交易的来源地址当作退款地址。付款可能来自交易所、托管钱包或智能合约,应让客户确认退款链、资产和目标地址。
- 保存原订单、交易哈希、实际链、资产、金额、处理决定、审批人和最终退款交易哈希,不要为了让记录看起来匹配而改写原订单状态。
避免订单卡住
- 原样渲染
paymentInstructions中的金额、链、资产与地址,不让客户自行改动。 - 给订单设置合理的过期窗口,避免一笔输错的付款让订单无限期挂着。
- 在
payment.finalized上履约,绝不要凭客户“我已经发了”的口头声明发货。 - 上线前分别测试少付、多付、发错链和过期后到账,并为每种异常指定客服、财务与资金操作责任人。
相关
这篇文档怎么样?
最后更新