vip开通处理流程
趁着今天有时间,来复盘一下会员vip开通的流程。(此流程也适合大多数的订单流程)
开通vip, 创建订单
- 1.查表用户是否有打折
- 2.根据开通的月份,平台,打折,支付方式计算价格
- 3.添加支付订单(用户id, 开通月份, 价格, 平台, 订单类型, appid)
- 1.开启事务
- 2.在订单表vip_pay_order_record创建一条记录; 订单号生成(随机1~99999+时间戳), 状态status为PAYING
- 3.在订单支付日志表vip_pay_order_record_log创建一条记录, 状态为PAYING, 用于核对
- 4.提交/回滚
- 4.构建支付平台数据(支付回调url notifyUrl)
- 5.签名支付平台url
- 6.返回支付页面给前端
- 7.前端调起支付页面
支付回调
- 8.支付后会回调步骤4设置的支付回调url(notifyUrl)
- 9.根据订单号查询数据库订单记录
- 10.支付成功: 更新订单状态和用户vip信息
- 1.开启事务
- 2.更新订单表vip_pay_order_record的状态为SUCCESS
- 3.更新vip相关信息
- 1.用户vip表vip_user_info的信息, 如果没有就插入记录, 已存在(在原有vip时间上叠加)就更新字段信息(days)
- 2.插入用户vip更新记录到用户vip历史记录表vip_user_change_history, 用于核对订单
- 3. 在订单支付日志表vip_pay_order_record_log创建一条记录, 状态为SUCCESS, 用于核对
- 4.提交/回滚
- 11.支付失败:
- 1.开启事务
- 2.更新vip订单表vip_pay_order_record的状态为FAILED
- 3.在订单支付日志表vip_pay_order_record_log创建一条记录, 状态为FAILED, 用于核对 - 4.提交/回滚
- 12.发送推送消息
- 1.自己开通. 大会员开通成功
- 2.赠送好友. 双方都推送(礼物送出去啦, 获赠大会员)
- 13.赠送B币
总结
涉及微信支付,支付宝支付,流程是前端触发应用后台生成订单;应用后台生成订单,并构建支付链接和支付平台url,封装支付回调地址,传回给前端;前端根据支付平台url唤起支付页面,用户支付成功/失败后回调到应用后台,应用后台根据回调的订单号和结果来修改订单的状态,绑定用户会员和发放虚拟币等;推送给用户(发送短息,公众号消息)等通知用户结果。
vip开通涉及订单服务,用户服务,二者的操作必须是在同一个事务处理。通过两张表,一张订单状态表,一张订单历史记录表,来达到订单状态修改和订单历史记录归档的目的。
- 订单状态表一个订单一条记录,生成和回调时修改状态
- 订单历史记录表用于记录同一个订单状态的改变,用于订单审核和客服核对。以防支付成功回调失败的人工补偿