V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
soasme
V2EX  ›  程序员

做过支付系统的进来,你们是怎么处理支付系统订单退款这些数据的一致性的?

  •  
  •   soasme · 2018-01-18 15:35:30 +08:00 · 2942 次点击
    这是一个创建于 2500 天前的主题,其中的信息可能已经有所发展或是发生改变。

    昨天看到 Airbnb 他们家 处理支付系统的一篇文章

    想到曾经做过一次支付系统,做的方式差不多,但是项目比较小,比不上他们要用上分布式,Hadoop,也没有什么报警系统。感觉他们要接全球几十个网关又有新老系统交接,体力活太多。。。

    我以前的做法是

    • 数据库一致性约束保证数据不重复
    • 用状态机算订单 /退款的状态
    • 用土脚本取出进入坏状态的单子进行人工干预,比如自动创建退款单神马的。
    • 用土脚本连到 Pingxx 家的接口拉数据算。

    不知道大家是怎么处理。

    PS, 欢迎大家订阅我的技术阅读喔~ 会每周奉上干货,在 网站 上提交邮箱即可订阅!

    1 条回复    2018-01-18 17:21:21 +08:00
    dl2k
        1
    dl2k  
       2018-01-18 17:21:21 +08:00
    我没太看懂你的意思,不过从我的角度理解。你谈的是商户系统的话,退款成功与否其实是在结算的系统(一般为第三方,银行,支付宝等)的。那无非你需要控制的就是是否出现多次退款,或者退款成功没有返回等情况。这个可能问题中退款(指基于之前的某个付款记录产生的 refund 行为)的数据可控是依赖于对方系统的结果。你的每次请求在本方系统都是先假定成功的(修改余额记录),并且生成本地的退款流水记录。然后向第三方系统发起请求(记录第三方的事务 id ),并通过定时轮询的方式向第三方确认状态(第三方必然要提供一个最终结果,成功 /失败)。你根据结果来处理本地的流水状态,看是要正常完成还是退回余额。所有的日志必须保留以方便异常时人工排查。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   984 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:56 · PVG 03:56 · LAX 11:56 · JFK 14:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.