java怎么解决微信支付重复支付问题?

开往春天的拖拉ji 发布于 2018/09/27 15:16
阅读 1K+
收藏 3

最近项目接入了微信支付功能,虽然可以正常使用,但是有个问题,就是如果用户支付完成之后,系统没有收到微信的回调,但是页面已经提示支付成功,这时候订单状态因为没有收到回调状态还是未支付的状态。假如通过调微信的api去查支付状态来修改订单的状态,那在调用的过程中如果系统收到了回调怎么办呢?这样就会有重复修改的问题。应该怎么解决这个回调问题呢?希望各位大神能给个思路。感谢!

加载中
0
OSC首席颈椎专家
OSC首席颈椎专家
发起支付的时候数据库保存支付记录,支付状态为未支付,然后微信回调支付成功修改支付状态,同时考虑接口补偿机制保证支付结果及时同步下来,修改数据库保证原子性,打完收工!
0
mhi
mhi

不要采用调微信的api去查支付状态来修改订单的状态,要根据回调成功来处理。另外你可以考虑一下异常数据处理机制与对账机制  。

0
学科带头人
学科带头人
只要订单号不改变,微信就不会让你重复支付,会给你报错,订单号重复
0
小99
小99
加个支付中状态就行了
0
鲁提辖智深
update支付状态的时候判断一下原支付状态就好啦,仅当原支付状态为未支付的时候可以修改为支付成功或失败,sql语句直接搞定了
0
尚浩宇
尚浩宇

类似回调类的,一定要做防重复回调校验,一般回调都会有个明确的目的,比如支付由未支付变已支付,那么在实际操作的时候就先判断当前的状态,如果是已支付那就不要继续处理了,曾经遇到三方支付重复回调,导致一次充值多倍余额的情况,当事人怕是吓得要跑路了

0
手可摘星辰3
手可摘星辰3

我也遇到了。请问你怎么解决的呢?

0
月影又无痕
月影又无痕

update orders set status=1 where id=? and status=0

绝对不会有问题。

 

select * from orders where id=? and status=0

.....

update ...

这种方式,会有并发的问题,一定要直接update。

s
shawnzzz
回复 @月影又无痕 : 意思是不能查询?直接更新?
月影又无痕
月影又无痕
回复 @shawnzzz : 多个请求可以同时查询,都是未支付状态,然后业务就会重复运行,导致异常。
s
shawnzzz
这种方式,会有并发的问题,一定要直接update。请问这个是什么意思?
返回顶部
顶部