怎么将微信支付和数据库表数据更新做成原子性?

issac宝华 发布于 2016/04/25 10:30
阅读 497
收藏 0

我的支付流程:

使用微信支付,支付成功返回支付成功的信息,判断信息,成功即用jquery的ajax去访问后台函数去更新数据库表。但是我发现这样做有一定的出错率,20个就大概有一两个会出现:支付成功,但是数据更新失败。

我想:先更新数据库表数据,再去执行微信支付,但是这样就有个问题了,要是用户进去了页面,触发了更新数据的函数,更新了数据后却不去支付,不就大问题。所以我又想,有没有办法可以,用事务操作数据库数据,然后微信支付的js返回成功标志位后,用js提交事务。这是我的想法。我用的是php。请问各位有什么好的方法

以下是问题补充:

@issac宝华:我的错,没把话说清楚。我重说一遍流程:在HTML页面(已经生成订单,支付状态为0),点击支付,跳到微信支付,(在js中调)调用微信支付接口,微信接口返回(get_brand_wcpay_request:ok)后,我就在判断是是成功标志位后,我才用jquery的ajax去调用后台的php函数去更新数据库表的信息(支付状态更新为1和其他一些信息)。但这样做有个大问题:微信支付成功了,数据库更新失败。这样就没有原子性 (2016/04/25 13:22)
加载中
2
南湖船老大
南湖船老大

思路不对吧,你应该是用户支付了,就修改状态为2,表示支付中。

然后支付不是都有异步么,异步成功更新为1.如果15分钟后,状态还没变过,就认为支付失败,改为-1.

如果支付成功了,但是异步这里出问题了,结果15分钟状态变成失败了,就查询流水补单。

0
沧海_Sea
沧海_Sea
先更新数据库然后支付  支付失败的时候抛出异常  然后事务回滚即可
issac宝华
issac宝华
请教:思路、方法是怎么样的?
沧海_Sea
沧海_Sea
回复 @庸什 : 可以 只要两个函数调用在一个事务里面就可以了
issac宝华
issac宝华
两个不同的函数里面可以对统一个事务进行操作吗?
0
leo108
leo108
做法就不对,更新数据库这个事情是后台接受微信异步通知,而不是用户前端主动请求更新数据库
0
张健滢
你这一边 只能是生成"订单",第三方支付平台会负责支付成功后的回调. 收到回调才能说用户支付成功
返回顶部
顶部