本文为你讲解融合收银台SDK架构的设计特点和架构框图,便于你理解在SDK内部有哪些功能模块,以及上下结构如何分层。
1、SDK架构的设计特点
在收银台SDK架构的设计上,除了要考虑软件架构设计的通用性(可用性和高稳定性) ,还要考虑互联网金融业务的特殊性,比如高兼容性、安全性、高扩展性等。
1.高兼容性
以Android移动应用研发为例,Android系统版本众多(业内也叫作碎片化严重),还有很多是各手机硬件厂商自己定制和修改的系统固件版本(例如华为的EMU和小米的MIUI固件) ,并且市场上这些版本的存量运行幅度很广,这样一来,Android系统版本的碎片化情况越来越严重。所以,我们在做收银台SDK架构设计时应该充分考虑移动终端系统运行的实际环境和兼容性。
在兼容性方面应该充分考虑硬件设备的兼容性和软件的兼容性:
(1)硬件设备的兼容性。因为不同的手机硬件设备生产厂商会生产不同尺寸和不同电子设备元器件的手机,所以在设计SDK时要兼容不同类型的设备(例如:平板设备为横屏,一般用HD版本来命名)。GooglePlay(谷歌应用商店)对Android应用。上架的要求很高,对硬件设备兼容性检测的要求也很高,必须通过Google的兼容性测试(Compatibility Test Suite,CTS)才可以上架。所以在设计SDK时应充分考虑硬件设备的兼容性,例如不同传感器及硬件加速功能的兼容性等,以满足在不同设备上使用的需求和用户体验。
(2)软件的兼容性。在Android版本碎 片化的情况下,软件开发人员应考虑对不同API的调用能否成功,确保应用在不同的系统版本上均能正常运行。例如:为了使SDK在所有系统版本上都显示并正常使用,SDK应该容忍一些系统功能API的变化,并提供适应不同屏幕尺寸的灵活用户界面。
2.高安全性
由于收银台SDK处于支付的最前端,负责资金流和信息流的输入/输出和商户的发货流程,所以为了保障资金流和信息流的安全和商户的利益,需要确保收银台SDK的高度安全。与支付系统的其他子系统相比,收银台SDK的安全性变得非常重要。
在收银台SDK中封装了一些复杂的逻辑实现及网络请求,负责与支付后端API进行网络数据通信,例如支付(预)下单请求及支付结果响应。由于网络请求的通用性和广泛性(一个SDK 会被多款应用或网络接入,影响面会扩大),一旦出现了安全漏洞、数据包篡改、伪造并被黑客利用,则影响范围之广、危害之 大是不言而喻的。
在安全性设计方面应该着重考虑鉴权、授权两个方面,并组要对数据安全加密。例如:不能使用明文传输业务数据,不能使用HTTP传输第三方数据,要使用安全、权威的数字证书及动态化密码。
案例:在使用HTTP从支付后端服务器请求和接收响应数据时,攻击者可以通过中间人攻击、劫持HTTP数据包,伪造支付后端服务器下发正常的支付数据,引导商户应用正常发货,造成商户的资金损失;攻击者也可以通过DNS劫持来利用漏洞,在DNS劫持、攻击的过程中,攻击者可以修改服务器的DNS记录,把访问者重定向到攻击者自己的支付服务器,形成虚假的支付数据。
根据上述例子,在设计架构的过程中应该考虑引入非对称加解密方案来保障数据的安全性,同时引入HTTPS组件对抗中间人的攻击,并引入HTTPDNS组件解决DNS的劫持问题。
3.高扩展性
高扩展性也是收银台SDK的一个重要特点,因为支付方式和渠道会经常变动,比如增加新渠道、上线、 下线、 关闭支付渠道,所以需要在设计收银台SDK之初就充分理解支付流程和业务,在充分理解后才能对支付渠道的模型和接口能力进行抽象,预留相应功能的扩展点;并在技术设计上借鉴OSGI (Open Service Gateway Initiative ,开放服务网关协议)和00 (Object Oriented,面向对象)设计扩展点模式。
在设计收银台SDK时要用面向对象的思想来看待世界,将公用的系统需求(安全加密、数据存储、日志记录、权限验证等)进行抽象和封装,形成统一的、便于扩展的接口,以便在每个外部的业务对象中进行调用。使用面向对象思想构建出来的软件既能使整体架构稳固,也能对公共功能进行封装,提供各模块的接口调用,这就好比适配层被封装起来,将接口进行暴露,以应对各种业务和多变的接口需求。
2、用户端SDK架构
这里根据市面上部分支付公司的收银台用户端产品,总结出通用的用户端SDK架构,如图1所示。
市面上的收银台SDK几乎都采用了动态加载技术,好处是具备了灵活性和动态性,在不需要某项功能时,可以不加载相关功能插件进而减少整个应用的内存和CPU、网络等资源消耗,还可以通过动态加载实现功能模块的热插拔和功能升级,即在不发布新用户端版本(用户端发布版本的周期一般较长)的情况下更新某些功能模块。
如图1所示的用户端SDK架构主要分4层,如下所述:
·第1层是接口层,包括商户应用或游戏开发者接入支付SDK的接口和回调函数(支付订单数据)。
·第2层是业务组件层,为了实现业务的动态更新功能,所有业务都被定义为一个插件,包括收银台的核心业务支付插件和充值插件,其物理表现形式为Dex文件,同时包含其他业务插件。
·第3层是基础组件层,主要支撑上层业务的日志、线程、 下载、定时任务、WebView、 插件服务等基础中间件和设施。
·第4层是平台适配层,目前主流的移动操作系统为Android和ios。