订单处理

vip开通处理流程

Posted by Liangjf on August 24, 2020

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开通涉及订单服务,用户服务,二者的操作必须是在同一个事务处理。通过两张表,一张订单状态表,一张订单历史记录表,来达到订单状态修改和订单历史记录归档的目的。

  • 订单状态表一个订单一条记录,生成和回调时修改状态
  • 订单历史记录表用于记录同一个订单状态的改变,用于订单审核和客服核对。以防支付成功回调失败的人工补偿