1、综述

作者:梁川
链接:https://www.zhihu.com/question/54247561/answer/138579226

技术内容:
1、事务处理:包括关系数据库的ACID、分布式事务(2阶段、3阶段、TCC、补偿性事务、可靠事件、Sagas长事务等)。先结合Spring AOP之类框架,把数据库事务处理机制深入研究一下。
2、服务化及服务化治理:交易导向系统一般都较为复杂,一般主流平台构建都采用SoA或类SoA架构,服务化及服务化治理成为关键,由此引申出消息中间件、zookeeper、redis、dubbo、spring boot、spring cloud等之类框架及技术
3、差错处理机制:由于偏互联网化的第三方支付、交易系统,系统间接口调用存在诸多的不稳定因素,例如支付结果通知时候,或者网络中断、或者对端服务器down掉等,导致结果通知未收到,最终影响对账、支付确认。因此整个系统的异常处理机制、补偿机制极为重要(例如异步通知、补单、主动查询)
4、安全:包括安全编码规范及习惯,避免SQL注入、各种Web安全漏洞攻击等常见攻击手段;各种数据加密算法及安全体系,例如PKI体系、TLS/SSL;
5、网络通讯及可靠接口调用设计
6、数据库性能及扩展性:交易系统一些关键表可能很难通过常用的NOSQL缓存、分库、分表、分库等机制来扩展,可能成为整个系统的性能瓶颈,例如账户表。良好的数据库表设计能力、SQL调优常识至关重要
以上内容,并非说偏内容导向的程序员不需要关注,交易导向的系统更需要强调这些,作为程序员,第一步先夯实以上技术基础。

与偏内容导向的程序员不同,第三方支付等交易系统一般还涉及较多的业务常识,包括:
1、会计学基础知识:账户系统是第三方支付的核心,而账户系统的原理来源于会计学原理
2、金融基础知识:包括银行、基金、保险、信托等的知识
3、电子商务知识
4、第三方支付的知识

以上业务常识,涉及面很广,不可能一下全了解,可以根据公司业务及个人方向来重点了解相关领域的业务常识。
可以说,只有真正了解业务,才可能设计、开发出好的系统。程序员一定要技术能力+业务能力并重,由此延展开还包括产品能力。虽然是技术,但一定要有意识培养自己的产品规划、产品设计、产品管理、产品运营的意识和能力,产品能力本身与技术设计和架构能力是相通的。

市面上关于第三方支付的图书较少,有几类偏技术的文档值得推荐:
1、强烈建议可以仔细研读一下一些第三方支付公司的商户接入接口规范文档,一方面了解业务,更重要的是学习好的接口设计及差错处理机制;
2、第三方支付申请牌照的认证规范,基本上涵盖了一个支付系统的技术规范、业务规范,很值得好好研读
3、银联相关的规范文档、接口文档,基本上涵盖了POS收单、清结算等的相关知识,比较成体系

资源:

支付大讲堂  http://wenku.baidu.com/link?url=f3B2CcmgR_piOfqKKDUGTI43L7CHzPsUcJC2vW71tFA53udM-xX3uWVeShMoST0wZ49vO_7Cu8T-E_Qohu5CPzBqkWcdppkw9HUZje0f1Ta

支付大讲堂---中国支付清算协会培训课程精选系列  中国金融出版社出版

人人都是产品经理  http://www.woshipm.com/

2、如何设计一个完整的订单系统

转:https://www.zhihu.com/question/54662446

作者:梁川
链接:https://www.zhihu.com/question/54662446/answer/140793441
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

说一下一些关键设计点供参考。
以下设计点,可以归为 "幂等设计"、"CQRS/Event Sourcing"、补偿机制等一些设计原则的体现。
1、请求/响应方都要维护自己平台的请求号/响应号,并保证请求号/响应号的唯一性。
设计上不能假定对方能够保证唯一性,应当保证请求方的序号+响应方的序号是唯一的。

2、原始请求/响应报文的所有内容都要本地持久化存储,便于请求/响应的过程回溯,有助于审计、排查、定位问题。

3、对订单状态定义要遵循MECE(Mutually Exclusive Collectively Exhaustive)原则,同时对状态机的迁移要做完整记录

4、消息同步返回+异步通知+主动查询结合 的补偿机制
由于互联网通信的不可靠性,例如双方网络、服务器、应用等因素的影响,不管是同步返回、异步通知、主动查询报文都可能出现超时无响应、报文丢失等情况,所以像支付业务,对结果的通知一般采用几种方案结合的补偿机制,不能完全依赖某一种机制。
例如一个支付结果的通知,一方面会在支付页面跳转时候返回支付结果(一般只用作前端展示使用,非最终状态),同时会采用后台异步通知机制(有前台、后台通知的,以后台异步通知结果为准),但由于前台跳转、后台结果通知都可能失效,因此还以定时补单+请求方主动查询接口作为辅助手段。
常见的补单操作,任务调度策略一般设定30秒、60秒、3分钟、6分钟、10分钟调度多次(以自己业务需要),如果调度接收到响应确认报文,补单成功,则中止对应订单的调度任务;如果超过补单上限次数,则停止补单,避免无谓的资源浪费。请求端随时可以发起请求报文查询对应订单的状态。

5、对重复报文的判重机制,这对诸如支付、代付等场景至关重要,避免出现重复支付、重复付款。

6、采用不同的事务处理机制(按照支付宝的说法叫柔性事务)来满足不同的业务场景需求。例如对支付账户余额更新,采用标准的ACID事务(两阶段、三阶段);对虚拟账户账户的会计分录采用补偿型事务(异步确保型);对支付结果通知,采用补偿型事务机制(最大努力通知);

3、总结

技术方面主要可以借鉴淘宝相关的分享,包括SOA、事务方面。业务方面可以银行、电信、淘宝相关的业务,大体上流程类同

第三方支付相关知识结构相关推荐

  1. PHP通过php_java_bridge调用第三方支付相关java类及jar包的一次尝试

    最近公司项目中引入第三方支付,闲暇之余尝试通过php_java_bridge来调用平台提供的jar包.期间其实踩了不少的坑,跨语言平台互相调用确实挺麻烦的,最终也仅在本地测试环境调试成功,事实上如果要 ...

  2. 中国第三方支付产业投资项目及十四五机会战略分析报告2022~2028年

    中国第三方支付产业投资项目及十四五机会战略分析报告2022-2028年   第1章:中国第三方支付产业市场环境分析 1.1 第三方支付产业政策环境分析 1.1.1 第三方支付产业主要监管政策 1.1. ...

  3. 软件测试之第三方快捷支付_支付相关测试方法

    相关支付官方的文档: 支付的正常流程: 按照PRD,不赘述 支付的异常流程: 支付金额操作: 1.支付的余额小于待支付的钱 2.调起支付输入密码框后,不进行输入密码,是否会生成订单 3.调起支付输入密 ...

  4. 第三方支付 拉卡拉支付相关的坑

    近期项目中涉及到支付的问题,本项目使用第三方支付为拉卡拉支付,从拿到demo开始,遇到以下几个问题: 首先,根据客户反映,拉卡拉支付只支持IE浏览器,且为IE11及以上. 其次,由于IE的安全机制影响 ...

  5. 第三方支付接口的技术比较研究

    发表期数:2011年第11期 所在版块:实践与应用 作者:李安渝 孙秋雯 摘 要:第三方支付市场的发展前景乐观,但同时市场竞争也越来越激烈.随着第三方支付业务许可牌照的发放,第三方支付将很可能打破大型 ...

  6. 某个第三方支付平台数据库的分析、学习与总结(转)

    原文地址:http://herman-liu76.iteye.com/blog/2330767    之前一直从事一般的WEB系统的开发,做过很多的项目了,现在主要做的一项工作就是与客户沟通需求后,设 ...

  7. 第三方支付将出新规 严防信用卡套现

    伴随着银行卡收单业务规模的迅速扩张,第三方支付企业在此领域正在加紧布局.据本报记者统计,在已经获得央行第三方支付牌照的40家企业中,开展银行卡收单业务的企业为15家,几乎占据半壁江山. 监管政策日益完 ...

  8. 对接第三方支付接口-记录

    对接支付接口,得知这种第三方的支付接口的对接方式一般为:组装接口需要的参数,以json数据格式或者其他格式(大多数为json),请求第三方支付接口的url,并且将回调的通知地址放在参数中,等支付完成后 ...

  9. 码云上不错的几个支付相关的项目

    阅读文本大概需要15分钟. 网上支付相关的额业务场景无处不在,如果能掌握支付相关的核心技术,对于升职涨薪有莫大的好处.目前国内支付以支付宝和微信这两种支付为首,其他支付则可以忽略不计.有些网友以这两种 ...

  10. 支付业务与技术架构学习总结(10)——第三方支付账务系统论述

    一.第三方支付账务系统设计 首先谈一下支付公司账务系统如何设计.关于如何记账,国内长期以来有两个发展方向,一个是以金蝶.用友为代表的财务系统,另一个是以银行为代表的银行账务核心系统.这两种账务系统都是 ...

最新文章

  1. 2008开年大礼:《Application = Code + Markup》中文版面世
  2. R语言ggplot2可视化:为图像中的均值竖线、中位数竖线、 geom_vline添加图例(legend)
  3. WebStorm 打开多个项目的方法
  4. 马斯克的脑机接口公司Neuralink最新进展:让猴子也玩游戏
  5. linux的备份和恢复命令,Linux基本命令——备份与恢复文档
  6. 首次使用Cesium加载3D数据不成功
  7. Angular 学习笔记——service constant
  8. SAP Fiori UI上关于时区Timezone的一些问题和解决方案
  9. C#跨线程操作控件的线程安全方法
  10. pthread 立即停止线程_iOS多线程:『pthread、NSThread』详尽总结
  11. 看懂555定时器,有哪些应用?
  12. flink-HA集群搭建和问题记录
  13. Json Schema 是什么?
  14. Ouino法国学习系统评价它是如何比其他学习软件
  15. 将字符串转化为ASCII码
  16. Adobe Acrobat XI 闪退问题
  17. Hash(散列)冲突解决 线性探测再散列和二次探测再散列
  18. 准确性 敏感性 特异性_特异性图
  19. scrapy爬虫1--基础设置篇
  20. 使用stm32f407和stm32f103板子进行can通信

热门文章

  1. 每个星座的出生日期php,php根据出生日期计算 年龄/生肖/星座
  2. 在Windows下使用Tortoise Git时,提示认证失败的解决办法
  3. 银行考试计算机也需要考金融知识吗,银行招聘考试科技岗考试科目及考试内容...
  4. 使用合取范式进行整数规划建模的方法
  5. service常驻后台
  6. java 字符串特殊符号_Java去除字符串中的特殊符号或指定的字符
  7. 唯冠为何赢了苹果却不付律师费
  8. Java 正则表达式之提取数字
  9. error: field ‘ifru_hwaddr’ has incomplete type
  10. 制作半透明的毛玻璃效果教程