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

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


「团队介绍」

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技在手

你看,我写,共成长!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值