Start

  1. 用户点击欠款支付进入欠款支付页面。

    1.1 欠款支付页面初始化,请求服务器获取欠款信息。

    1.2 有欠款信息则可继续下一步,否则提示【未查询到欠款信息】。

  1. 用户点击欠款支付按钮,前端请求服务器生成【业务系统订单】发起微信支付。

​ 2.1 判断是否存在【已支付】,但未及时更改订单状态为【已完结】的订单。

​ 2.2 生成业务系统订单,调用微信接口生成支付参数,返回给页面。

​ 2.3 页面拉起支付,等待用户输入密码完成支付。

  1. 用户支付完成

​ 3.1 页面进行轮询操作,查询订单状态。十秒后订单仍然未变更为【已完结】状态,则停止轮询,提示用户:订单状态同步稍有延时,请稍后再来查看。

4.支付流程完毕

用户支付完成后,后端进行的操作:

  1. 等待回调

    1.1 收到回调后修改订单状态为【已支付】

    1.2 并调用接口同步一条欠款支付的财经信息给业务系统。

  1. 两个定时器,定时执行操作。

订单状态:

待支付:订单已经生成,等待用户支付。

已支付:(订单已经支付),通过【回调】进行修改或定时任务调用【微信查单】接口,确认用户是否支付,微信支付已经完成,修改为此状态。

已完结:微信支付已经完成,业务系统已更新欠款信息,修改为此状态。

已超时:设置一个待支付订单超时时间,判断处于待支付状态的订单,是否超过【待支付超时时间】,超时修改为此状态。

已退款:通过定时器轮询,将已支付,但超过一定时间,始终没能更改订单状态为【已完结】的订单,进行自动退款操作,同时更改订单状态为已退款。

(考虑可以不用退款,而是重新发起更新业务系统欠款支付信息的操作,同步业务系统订单,更新成功后修改订单状态为已完结)

两个定时器:

  1. 未支付订单,调用微信查单接口同步是否已支付。修改超时未支付的订单,改为已超时状态。

  2. 已支付订单,但超过一定时间后仍未修改为【已完结】状态的订单,再次尝试同步订单信息为【已完结】,或者进行退款操作。

Tips:

读者可能重复支付的问题:通过判断订单状态,如果处于已支付状态,提示:用户等待系统同步欠款支付信息,请勿重复操作。

回调 + 微信查单定时器可以保证订单及时更改支付状态。

以上业务逻辑的接口列表

1.获取欠款信息
入参:读者id,馆代码

2.生成一条欠款待支付订单
入参:读者id,馆代码,微信发起支付返回的相关参数,

3.修改订单状态 (已支付、已完结、已超时)
入参:读者id,馆代码

3.1 修改订单为已支付
3.2 修改订单为已完结 (用户欠款数归零)
3.3 修改订单为已超时

4.获取欠款支付订单信息
入参:订单 id

5.获取所有已支付订单(所有馆,返回map,key为馆代码,value为List<已支付订单>)

6.获取所有待支付订单(所有馆,返回map,key为馆代码,value为List<待支付订单>)