点击「京东金融技术说」可快速关注

「团队介绍」

POS支付团队,支撑整个京东货到付款业务,配送小哥人手一台POS机就是我们支付工具,为京东数万台POS机提供更好的支付体验、更好的支付产品,是我们整个团队的目标。POS支付团队近期搞的事情:

2017年5月18日:打通银联POS小额免密免签第一笔线上交易;

2017年5月:上线离线二维码,POS机支持无信号完成支付;

2017年3月:POS新支付系统POSPAY上线并完成全部切量;

2016年9月6日:完成央行银行卡收单借贷分离改造;

2016年9月:上线联机二维码,POS机支持二维码支付;

2016年8月:上线POS新退款系统,彻底替换掉无防重、大量运营问题的老退款系统;

2016年6月:上线POS支付电子小票,助力货到付款实现无纸化,提升配送效率;

…….

---支付核心研发部出品

POS支付简介

POS支付,属于银行卡收单业务中线下收单支付,银行卡持卡人在POS终端上进行现场刷卡支付,在POS终端上完成消费支付场景,俗称POS支付;

POS支付基于银联的银行卡联网通用、跨行交易清算系统的基础上,可以支持各种银行卡在一机上完成支付场景,其实POS线下支付的一通道即可满足支付需求,因此POS支付模式分为直联模式、间联模式;

>> 直联模式:商户→银联网络→发卡机构;

>> 间联模式:商户→收单机构网络→银联网络→发卡机构。

POS支付技术解析之8583协议

从事POS支付技术研发,不管渠道采用是直联模式还是间联模式,首先需要了解声名显赫银联标准8583协议,任何对接多个支付通道时候都会面临接口统一问题(通讯协议、数据格式义统一),银联标准8583协议基于ISO8583报文国际标准的包格式的通讯协议,通过Socket协议传输8583报文数据,解决线下POS支付数据交换统一问题,8583报文强悍之处在于报文体小减少带宽占用,保证POS机弱网情况下进行支付交易;同时报文数据格式标准、位图支持动态字段传输。

8583报文由128个字段域按顺序排列组成,银联标准明确定义每个字段域的数据内容、数据格式、数据长度(定长、非定长)。例如第2域数据是主账号银行卡数据,第4域数据是交易金额;下面通过解析一笔支付请求报文详细了解下8583报文构成,POS支付请求的十六进制字符串(FFFFFF代表脱敏数据)如下:

0087600055000002007024048020C0981516FFFFFFFFFFFFFFFF000000000000011980289950200800210037FFFFFFFFFFFFFFFFD20081011705469900000037323231303131363330313131303035343131313733393135363E6133781E9356921000000000000000000830313030303036300012303030373338323839393530B97BBAB333102125

解析脱敏关键字段域后的报文格式为:

解析后报文字段域最多到64域,8583报文分为128域、64个域两类报文,上面这个报文就是64域报文,并且银联在前64个域定义常用的数据字段。报文结构由报文长度(两个字节)+报文头(固定报文类型)+报文数据组成:

>> 报文长度:0x0087=135字节,报文总长度135字节

>> 报文头:6000550000,不同渠道的固定值

>> 报文数据:4位字节消息类型(0200消费)+64bit位图bit map+交易数据,其中位图是报文数据解析的核心,表明报文数据包含哪些字段域。

7024048020C09815转换成二进制是64位的bit:

0111000000100100000001001000000000100000110000001001100000010101按顺序每个比特1代表报文存在此域,第二、三、四位bit都为1则表示报文中存在2、3、4域;上面报文解析后传输了2,3,4,11,14,22,25,35,41,42,49,52,53,60,62,64字段域,根据这个可以按照银行标准8583报文各个字段域的定义始解析交易数据:

第二域主账号,非定长数据域2个字节长度值+最大19个字节的主账号组成,非定长前两个字节表示长度,16表示该域长度16位,截取16字节便是卡号FFFFFFFFFFFFFFFF;

第三域交易处理码,6个定长数字域,继续截取6个长度数字000000表示消费未选卡种(银联明确定义);

第四域交易金额,12个定长数字域,继续截取12个长度数字000000011980表示交易金额为119.8元;

以此类推解析出报文交易数据,可以看出8583报文标准格式结构、位图支持动态字段传输,这种思想值得在接口设计中借鉴。

POS支付技术解析之安全

POS支付的安全,可以通过了解这些相关术语彻底搞清楚,分别是硬加密、加密机、根密钥、终端一机一密、终端传输主密钥、终端工作密钥;

POS支付的数据传输安全策略,数据加解密采用硬加密方式,由加密机完成加解密操作,加密机(HSM)都会存在一个主密钥(根密钥)属于最上层密钥,HSM主密钥MK(Master Key - MK)由三个成分(32位十六进制数)组成,由不同角色分派专人管理和维护,一般由2~3人采用"背对背"形式进行输入;MK以密文形式存储在加密机黑匣子中,且永远不以明文形式出现,保证了根密钥的安全;后续各种密钥都是基于根密钥基础,采用不同加密算法生成相应的密钥。

POS终端数据安全采用银联规范一机一密(传输主密钥)策略,每个POS终端有一个唯一传输主密钥,POS终端密钥分为传输主密钥、工作密钥,都是通过加密机生成,下发给POS终端后存储在POS终端硬件密钥区(安全芯片),密钥区安全性较高,可防止物理攻击、防外部窃取。

终端传输主密钥要用于加解密工作密钥,保证工作密钥的传输安全,传输主密钥灌装到POS机后,后续不会再灌装,一旦POS机出现主密钥丢失就必须返厂。终端工作密钥属于底层密钥,用于对每笔交易数据敏感信息加密、报文MAC计算,POS终端一般12个小时或完成2500笔交易会重新签到获取新的工作密钥,工作密钥通过主密钥加密后密文下发到POS终端,工作密钥主要是pin密钥、磁道密钥、mac密钥,分别用于加密数据中银行卡密码、银行卡磁道信息、生成报文信息认证代码(Message Authentication Code),MAC码用于防报文篡改、报文丢失类似数据摘要;

POSPAY加密服务使用流程大致如下图:

POS机发起交易(报文中磁道信息、PIN、MAC通过签到获取的工作秘钥进行相应的加密);交易服务器接收到POS报文后,通过调加密平台计算MAC来验证POS报文MAC是否正确,然后对PIN和磁道进行转加密,并计算渠道报文MAC,重新组装好报文发送给渠道,渠道支付成功后返回支付结果,校验渠道结果报文MAC,然后把渠道的返回结果返回给POS机。

以上所有密钥在保存都是密文存储,无法直接获取明文的密钥值,明文的加解密全部通过加密机操作完成,而访问加密机又是严格控制,这样一层层安全策略保证了POS支付的数据安全。

POS支付之系统架构

POS PAY系统架构

POSP前置,负责解析8583报文、管理类非交易相关请求处理(IC参数下载、IC卡公钥下载等),熟悉8583报文还是需要一定的学习成本,在系统架构设中只在一头一尾涉及8583报文拆包和组包,其他内部整个应用无需处理8583报文。

POSPAY网关,负责个串联支付链路,POS支付链路:收到POSP前置支付请求>基础信息校验>调用风控>调用支付路由>调用交易系统创建支付单>调用渠道进行支付>支付成功>调用交易系统创建支付结果;网关要对渠道支付成功后异常做异常处理,例如银行超时、写支付结果异常等情况,增加自动冲正减少单边账财务处理成本;对非关键链路增加降级开关,紧急情况可进行降级处理(比如商户权限校验,在大促期间,商户权限信息基本不会调整,特殊情况下,可以从支付链路中剔除该rpc操作,缩短支付链路整体耗时);降级策略分为自动降级、人工降级,网关降级策略主要采用人工降级,人工降级通过支付统一配置系统设置开关参数,修改参数后实时同步到各个实例,各个实例根据本地化后参数进行开关降级操作。

POSPAY路由,负责路由渠道、渠道分流,路由系统作为最关键的基石要有多个路由执行策略,现在采用DB+主备缓存执行策略,执行策略可自动降级,例如路由执行缓存时,出现缓存不可用则自动降级为DB路由执行,缓存和DB数据必须保持一致,保证路由执行到任何节点都可自动降级;路由的业务虽然不复杂,但是作为支付链路中的必要环节,路由采用三种执行策略,保证高性能和高可用。为了保证性能我们将部分信息本地化(通道、分流信息等),同时首选缓存操作,自动降级为DB操作;缓存首选同网络环境缓存服务R2M,如果R2M缓存异常,我们会切到备用缓存服务JIMDB(不同网络环境),并且为了保证服务可靠,当路由过程中,操作缓存出现异常,本次会自动降级为DB路由。DB和缓存中数据定时同步保持一致,但数据状态不同步各个执行策略独立执行。

POSPAY路由三种执行策略如下:

POSPAY交易,负责交易数据保存、支付成功后账务处理和报风控,采用京东支付上一代交易系统架构,采用DB分库分表、双缓存策略、JMQ、大库保证交易系统高可用、高并发、高性能;交易成功后的账务、报风控都是写支付结果后异步执行,这样简化了支付链路,渠道支付完成直接返回给用户支付结果信息。为了保证高可用以及数据完整性,我们缓存和DB同步双写,如果DB写入失败我们会发送MQ异步重试,只要DB写入成功或者缓存与MQ操作成功,则该笔交易则认为收单成功,这样即便是DB出现异常,我们也可以保证正常收单。如果MQ发送失败,自动降级为接口调用触发异步任务继续发生MQ,保证最终一致;多缓存策略,主要是在高并发下替DB抗压减少DB请求,提高性能,多层数据策略保证支付收单高可用;

POSPAY交易双缓存策略如下图:

POSPAY基础,负责基础信息维护、交易校验、查询等功能,采用DB+多缓存(同路由缓存策略一致)实现,多缓存设置主备开关,并且缓存出现抖动自动降级到库。

以上就是京东支付体系中POS支付系统架构;

POS支付现状趋势

随着码支付普及,对线下POS支付冲击很大,POS支付存在终端成本的问题,目前各个支付收单机构都在积极寻找突破点,现在POS机具都已支持聚合支付,并且推出POS支付+,例如:POS支付+商户MIS管理集成、POS支付+卡券营销、POS支付+便民服务等等创新业务,让POS终端不再单一支付工具,提供更多的金融服务、商户服务。

京东POS机结合自身业务集支付+物流配送一体机,同时支持二维码支付、离线二维码支付;目前银联积极推动闪付、小额免密免签支付等创新支付业务,这些创新业务提升线下支付用户体验,京东支付下POS支付积极拥抱银联主推业务,都已实现的闪付、小额免密免签等,给JD用户更好的支付体验;

虽然POS支付由于存在终端成本的问题,但在用户现场支付场景中很好支持大额支付,并且随着央行21号在2017年7月1号的实施,POS终端出厂时候必须在银联报备并分配相应的SN号和SN密钥,每笔支付交易都需要上送终端SN号和SN密文,做到每笔交易可追溯,即规范支付收单市场,避免商户二清、切机、套码等问题,很大程度保护了持卡人支付安全。

综上所述近期一段时间POS大额支付场景扩展、聚合支付、POS支付+,属于线下支付POS支付业务突破点。

---支付核心研发部出品

京东金融技术说

▼▼▼

原创·实用·技术·专业

不只一技之长

我有N技在手

你看,我写,共成长!

支付核心研发部 | POS支付系统技术架构解密相关推荐

  1. 自研海外PCDN系统技术架构与演进

    Photo by Nick Wehrli from Pexels 本文来自小溪流科技首席架构师张道远在LiveVideoStackCon 2019深圳站上的演讲,演讲内容主要涉及PCDN海外复杂环境中 ...

  2. 爱聊天(LoveChat)即时通讯聊天APP系统——技术架构

    爱聊天(LoveChat)即时通讯聊天APP系统--技术架构 公司旗下第三代即时通讯产品 第一代:阿卡信 https://gitee.com/openzaly/akaxin-openzaly 第二代: ...

  3. 医疗保障信息平台HASF应用系统技术架构名词解释技术选型架构图

    下载地址: 医疗保障信息平台HASF应用系统技术架构规范.pdf下载-无极低码 HSAF 医疗保障应用框架(Healthcare Security Application Framework) Iaa ...

  4. 三节课学懂支付核心(上)| 支付学院

    支付核心和清算核心职责 首先要明确一个概念:一个完整的支付清算系统结构内,各种特定业务所涵盖的支付服务.清算服务是相互独立的.其独立性体现在具体的产品研发过程以及后期维护等各项工作中: 1. 这种现状 ...

  5. 【SDCC讲师专访】京东数据库系统研发部负责人田琪的架构之路

    2016年4月22日-23日,由CSDN重磅打造的数据库核心技术与实战应用峰会.互联网应用架构实战峰会将在深圳举行. 这是继3月中旬,SDCC之架构&数据库峰会在上海圆满收官后的再一次相聚.上 ...

  6. 史上最详细的新浪广告系统技术架构优化历程

    内容来源:2017 年 08 月 10 日,新浪广告开发技术专家徐挺在"第二届APMCon中国应用性能管理大会[大规模网络架构优化专场]"上进行的<新浪广告系统的服务化优化历 ...

  7. 业务系统技术架构的方法论

    业务类系统(通常称为To B 类产品),一般包括crm,供应链,物流等.系统的架构设计非常具有挑战性. 面向用户的To C 类前台产品,无论产品经理还是用户都已经培养起了使用习惯,对功能有一定程度的理 ...

  8. QQ 空间社交广告系统技术架构实践

    作者|冯启航 编辑|小智 QQ 空间的在增值营收服务上探索了多年,本文将展示负责增值服务体系的后台工程师如何在众多增值业务需求面前找到最合适的技术架构的支撑这个年入几十亿的产品,以及如何利用好大数据为 ...

  9. 全文检索系统技术架构及流程说明

    技术架构图 索引的创建 根据文件来源,分为hadoop数据和oarcle数据两类. (1) hadoop数据 在线网盘的文本文件和非文本文件都保存在hadoop的hdfs或hbase数据表中,推荐系统 ...

最新文章

  1. java8新特性_Java8新特性之Date API|乐字节
  2. 2020年五大云计算预测
  3. [CLR via C#]17. 委托
  4. 工程搭建:搭建子工程之搭建环境构造返回实体类
  5. 【转】Info.plist中常用的key简介
  6. jstl视图_使用JSTL视图探索Spring Controller
  7. c语言格式对齐填充_C ++中类的大小 课堂上的填充和对齐| 派生类的大小
  8. Python 中的反转字符串:reversed()、切片等
  9. 用ikvm 来把java类库转换成_net类库,IKVM.NET
  10. Android开发笔记(一百二十七)活用提示窗Toast和Snackbar
  11. STL常用函数总结-queue+priority_queue
  12. C++刷题——2802: 推断字符串是否为回文
  13. python实训第一天
  14. Linux下载WordPress出现错误,从win server 2008迁移wordpress到linux时出现的问题
  15. #define c# 报错_天轰穿C#教程之#define和#undef【原创】
  16. Python笔记4:控制流
  17. 内网 centos7 离线安装rpm包的三种方法
  18. windows常用命令行操作及相关快捷方式
  19. Kubernetes全套笔记
  20. 【Multisim仿真】二极管加正向和反向电压测量实验

热门文章

  1. TDengine:开源、高效的物联网大数据平台
  2. ​当AI搞起艺术来……
  3. jk女孩被人偷拍知名企业代码泄露, 原来是属性注解模式(Attribute Annotation Pattern)兴风作浪
  4. 关于安全的一点理解感悟
  5. IBM微码刷新(一)使用BoMC制作微码刷新介质-cuixf@DC
  6. 快速学习nodejs系列:微信公众号开发一之环境准备
  7. 哈罗单车获10亿元D2轮融资 共享单车仍有精彩可期待
  8. 算法高级(42)-大数定律-澳门皇家菠菜,为什么你逢赌必输?
  9. 阿拉伯数字 转 汉字大写
  10. 老罗的锤子,3000块钱贵吗?