ENGINEERING NOTE 26 / 50 · CARD

充卡响应丢失后,如何安全重试

OPEN RAMBO ·

超时不证明充卡失败。复用原操作标识,核对结果后再考虑新扣款。

本文由 OPEN RAMBO 发布。工程方案和伪代码用于说明设计,不是现有产品 API 文档;示例数字均为演示。

标识绑定操作意图

操作键绑定用户、卡片引用、金额和币种。相同键不同参数应拒绝。每次重试随机生成新键,会让重试变成新操作,失去幂等作用。

表示结果未知

上游响应丢失后保留待处理或核对状态。查询上游引用或使用有文档支持的重放机制。卡可能已充入,不能只因HTTP超时就退钱包。

只提交一次

最终扣款使用唯一账本引用和原子状态迁移。重复请求返回相同结果。界面显示原操作进度,而非引导立即第二次充值。

示意流程

key = (owner_id, client_operation_id)
assert_same_parameters(key, card_id, amount, currency)
return resume_or_create(key)

如何验收

上游成功后丢弃响应,再并发重试。核验只有一次上游充卡和一次最终钱包扣款。

延伸阅读

继续阅读