创建订单超时后,如何避免重复提交
【摘要】 调用创建订单接口时,如果请求超时,不能仅凭客户端没有收到响应,就认定服务端没有创建订单。请求可能尚未到达,也可能已经处理,而响应在返回途中丢失。一个稳妥的处理流程是:1. 为业务操作保存唯一的本地请求标识、提交时间和必要的订单特征。不要记录密钥或会话令牌。2. 将超时操作标记为“结果待核对”,暂停对同一业务重复提交。3. 通过官方订单查询接口,分页获取相关时间范围内的订单,再用订单详情核对产...
调用创建订单接口时,如果请求超时,不能仅凭客户端没有收到响应,就认定服务端没有创建订单。请求可能尚未到达,也可能已经处理,而响应在返回途中丢失。
一个稳妥的处理流程是:
1. 为业务操作保存唯一的本地请求标识、提交时间和必要的订单特征。不要记录密钥或会话令牌。
2. 将超时操作标记为“结果待核对”,暂停对同一业务重复提交。
3. 通过官方订单查询接口,分页获取相关时间范围内的订单,再用订单详情核对产品、规格、数量和业务标识。列表不完整、接口报错或订单无法分类时继续核查,不能直接当作没有新订单。
4. 如果发现匹配的订单,记录订单号并进入后续处理;如果确认存在不匹配或无法识别的订单,先人工核实。
5. 只有按业务风险制定的查重条件全部满足后,才决定是否再次提交。对于支持幂等键的接口,优先按官方文档使用幂等键,并核对其有效期和作用范围。
查询结果只反映查询时看到的状态。“列表里暂时没有”并不等同于“原请求一定没有发出”;还应考虑异步处理、数据延迟和分页遗漏。对于付款等不可重复的操作,更要单独保存请求次数和结果,避免把普通创建重试规则直接套用到付款。
最后,在测试环境验证超时、延迟返回、分页和重复回调等情形,并在日志中保留时间、状态变化与脱敏后的订单标识,方便排查。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)