• 支付需要考虑场景


    生成支付签名

    1.根据订单号查询最新支付单是否有待支付的支付单

    2.如果有待支付支付单,触发一次主动查询,避免回调完了和支付成功主动查询查询结果失败的重复失败,导致用户重复支付

    3.如果此单查出已支付则直接修改订单状态提示此单已支付

    4.如果待支付支付单未支付,则判断是否超过超时失效 如果超过则提示支付超时,请重新下单

    5.如果超时则生成支付签名(可以本地缓存 或者每次实时请求支付系统生成,支付系统应该也会缓存)

    5.如果没有支付单,则创建支付单并落库,然后根据新的支付单 生成支付签名

    主动查询处理

    1.即支付成功,支付方通知我们成功我们控制跳转到对应的页面,或者支付方302重定向跳转到我们的确认页面,调用支付的主动查询,如果支付成功则更改状态为待支付下一状态(涉及修改状态加锁)

    异步回调通知处理

    1.异步回调查看订单是什么状态,如果是因为过期未支付的话,则触发自动退款(一般是主动查询为待支付,异步回调未回调,或者down机,处理失败,或者消费消息不及时,定时任务过期未支付)

    2.此接口不宜阻塞,收到回调消息,记录日志表,消息丢到MQ 异步处理 

    过期未支付处理

    1.正常未支付不需要关心

    2.如果是因为实际支付了,主动查询未支付,异步回调未回调,或者down机,处理失败,或者消费消息不及时。

    3.过期未支付逻辑触发时。主动查询一次,如果因为2这种情况导致的待支付,实际已经支付了。根据业务评估自动退款 还是判定支付成功改为待发货

    4.比如这种业务场景,有限制多少公里15分钟必须送到。如果没有送到,就会赔钱。如果过期未支付逻辑触发时 再修改为待发货,就会导致送货超时赔钱

    涉及到的表

    订单表,支付单表,退款单表(售后表)

    支付临界时间

    生成支付签名都需要传递超时时间,且当前系统也会有个超时时间。可以比第三方支付大几秒。让三方支付抛出超时

  • 相关阅读:
    ERROR com.opensymphony.xwork2.interceptor.ParametersInterceptor
    vscode中使用node服务调试,会在promise的reject出现断点报错
    koa-router匹配多个路由添加中间件函数
    react-router中的路由钩子使用
    在less中不能正常使用css3的calc属性的解决方法
    react-redux安装失败的问题
    npm脚本命令npm run script的使用
    npx的使用和理解
    babel的命令行工具babel-cli解析
    babel的.babelrc解析
  • 原文地址:https://www.cnblogs.com/LQBlog/p/13839999.html
Copyright © 2020-2023  润新知