微信提现流程图

第一次在项目中遇到需要做一个微信提现功能.做了一个简单设计图,不知道能不能满足大部分业务场景.贴出来希望和大家一起讨论讨论.继续优化.

微信提现流程图

这里不牵扯提现的前期准备.比如企业账户,公众号,用户绑定等.

简单对整个流程图做一个文字说明:

1,用户发起提现申请  这里没有什么可以说的.无非就是输入提现金额之类的操作.

2,做一些校验,主要校验用户余额是否满足提现的要求.

3,余额都不足就不要提现了撒   (想P呢..)

4,如果有钱的话,就直接进入提现的下一个流程,对用户的金额进行加减,记录明细等

5,这里重新获取一次用户余额,主要想法就是万一脏读了呢.(其实后面的乐观锁也能避免这种情况),但感觉再读一次数据,会减少乐观锁更新失败的几率

6,想的是先提前扣除用户金额.免得提现之间有其他操作.导致最后金额不正确

7,数据库做了一个乐观锁,尝试几次更新后直接抛异常.也是防止多线程更新数据

8,生成提现明细记录

9,调用微信支付api完成支付

10,微信接口如果返回状态不是明确表示成功或失败.还需要再重新调用微信支付查询接口api查询订单支付状态

11,调用微信支付查询接口返回是成功支付,则更新明细记录状态为完成

12,调用微信支付接口直接返回成功支付的话,也可以直接更新明细记录状态为完成

13,如果微信支付接口或查询接口都标识支付失败,修改微信明细状态为失败

 

补充想法: 

1,在步骤13的时候,大家会发现步骤6扣除了用户金额.这里有本来想添加一个步骤,就是将用户多余扣除的金额再补回去.但又觉得,这种特殊情况应该人工介入来处理了.不知道大家如何看待.

2,这个里面只把步骤6和步骤8放在一个事物里面.我的想法是,这个流程还是很长的.如果都在一个事物里面是不是性能不会太好呢.这里有没有大佬出来讲解一下改如何设计才正确呢.

 

 

最后: 这个设计方法也肯定有很多不足,如果大家有什么建议欢迎留言讨论.   希望能做出一个又安全有高效的提现流程.