开发者生态
evening
微信小程序支付中如何避免取消与成功事件并发导致的订单状态错乱?
2026-07-12
1 阅读
约2分钟阅读
南柯之间
字号:
业务背景: 用户点击进行中订单【去结账】,前端会锁定当前订单,锁定状态下订单不会展示在待进行订单列表; 拉起微信官方支付组件,存在两种分支逻辑: 支付成功:调用后端支付完成接口,完成订单闭环; 用户点击支付左上角叉号 :调用后端订单释放接口,解锁订单,订单重新回到待进行列表; 业务强制要求:锁定的订单必须二选一处理,不释放会导致订单永久锁定。 复现步骤: 点击去结账,拉起微信自带支付弹窗,订单进入锁定状态; 快速输入支付密码,在密码输入全部的,立刻点击支付弹窗右上角取消按钮; 故障现象: 两个接口并发执行:取消释放订单接口、支付成功回调接口同时触发; 接口执行时序:释放订单接口响应更快,先完成解锁,订单回流至待进行列表; 延迟几秒后微信支付成功回调执行,用户实际扣款成功; 最终结果:用户真实扣款,但订单未完成结算,依旧停留在待进行订单列表,形成资金与订单状态不一致的脏数据。 疑问 这种支付成功与取消事件并发冲突的场景,有什么成熟方案做接口互斥、状态拦截,避免订单和资金状态错乱? 微信支付组件 取消事件里面调用释放订单是必做的,因为输入密码以后会有等待回调的过程,这个过程快两三秒,网络慢可能六七秒。 本来想做如果同时触发了,就取消以后,等待五六秒去查询有没有支付成功,没有支付成功在调用释放订单接口。但是这样等待的交互,太差了。所以放弃了。 然后和后端沟通,想让后端做一下处理,就是即便是调用了释放订单接口,订单回到了进行中那边去,但是后端检查到支付成功的接口,去回推相关订单,检查到已经支付了,给直接释放掉。 但是后端说这样处理,他们的逻辑要大改,还是想问前端有没有相关的优化。 已经问过ai,ai回答基本就是后端处理,前端等待这种,求有没有大佬知道更好的反感
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱