ENGINEERING NOTE 26 / 50 · CARD
充卡响应丢失后,如何安全重试
超时不证明充卡失败。复用原操作标识,核对结果后再考虑新扣款。
本文由 OPEN RAMBO 发布。工程方案和伪代码用于说明设计,不是现有产品 API 文档;示例数字均为演示。
标识绑定操作意图
操作键绑定用户、卡片引用、金额和币种。相同键不同参数应拒绝。每次重试随机生成新键,会让重试变成新操作,失去幂等作用。
表示结果未知
上游响应丢失后保留待处理或核对状态。查询上游引用或使用有文档支持的重放机制。卡可能已充入,不能只因HTTP超时就退钱包。
只提交一次
最终扣款使用唯一账本引用和原子状态迁移。重复请求返回相同结果。界面显示原操作进度,而非引导立即第二次充值。
示意流程
key = (owner_id, client_operation_id)
assert_same_parameters(key, card_id, amount, currency)
return resume_or_create(key)如何验收
上游成功后丢弃响应,再并发重试。核验只有一次上游充卡和一次最终钱包扣款。