请教支付系统中如何防止并发通知产生的问题


在支付系统,一般有支付渠道流程是这样的:
1.用户在支付系统下一个订单。
2.支付系统引导用户跳到第三方去支付。
3.用户完成支付后,第三方平台会在后台异步回调支付系统接口
4.支付系统收到异步通知,如果订单没有完成,则更新用户的剩余金额,然后完成订单,如果已完成就不处理

在第3,4步的时候,如果第三方同时发送二条回调请求,支付系统收到二条通知的时候得到的订单状态都是未完成,这样就会更新二次用户金额,请教如何进行防止

===================
大家都提到了加锁,顺便可以聊聊如何加锁,有哪些方法

系统设计 php

经理.不要 12 years, 6 months ago

执行订单更新时带条件更新,如update voucher set status=1 where status=0 and order_id=XXXX;

补充一下,带状态条件更新,一次只会有一条能更新成功啊,其他更新操作都因为不符合条件了,更新不了了,返回的受影响行数就是0了,不会出现二次更新用户金额,因为mysql更新同一条数据还是有先后顺序的

我真名叫Th answered 12 years, 6 months ago

Your Answer