通过“集成为先”的方法为支付终端构建商务平台

2023-10-24 04:59

本文主要是介绍通过“集成为先”的方法为支付终端构建商务平台,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

\

本文要点

\\
  • 所有支付终端都带有一个操作系统(也叫做“应用控制器”),并可通过不同程度的可编程性和访问能力让用户访问终端硬件的核心功能。\\t
  • 提供给开发者的SDK倾向于尽可能面向底层,开发者通常需要自行管理集成、安全性和认证等事宜。\\t
  • Poynt团队采用了一种集成为先的方法向外部服务提供RESTful API。\\t
  • 这些API有助于简化集成与安全性,提供了更出色的开发者体验,使得开发者可以更容易地满足具体需求或实现与新型外设的集成。\
\\

今天的商业活动已经模糊了线上和线下的界线,可以通过任何可能的渠道开展。移动商务、语音商务、对话式商务……各种不同的商务方式组成了我们所说的全渠道商务。伴随着诸如物联网等创新技术的诞生,各种实体系统和流程相互之间的交互方式与传统的互联互通方式产生了巨大的差别。跨越物理和虚拟系统的技术和交互方式,客户的购物行为,以及构建全渠道体验的能力等技术革新不仅需要构建API,而且需要在此基础上采取截然不同的方法。商务平台所用的系统和组件在设计和构建过程中必须考虑到互联性、互操作性以及可扩展性,这样才能帮助开发者打造更新颖的购物体验。这正是我们所说的“集成为先”的方法。本文我们将介绍Poynt构建这种商务平台的方法。

\\

这一切该从何处着手?

\\

在开始详细介绍“集成为先”的方法前,先来看看支付终端的一些基本组件,以及这些组件所扮演的角色。传统的支付终端主要用于处理基于银行卡(信用卡/借记卡)的支付交易。
\这类系统通常包括:

\\
  • 读卡器 - 终端的核心组件,提供了所有银行卡(磁条卡、芯片卡、NFC卡)所需的全部物理和逻辑接口。\\t
  • 显示屏 - 向客户/商家展示数据和信息提示(如收费金额,或要求客户输入PIN码或支付类型)。\\t
  • 外部硬件接口 - 通过各种物理(RJ11/串口/USB)和网络接口(以太网/WiFi/蜂窝网络)提供输入/输出连接能力。这些外部接口是支付应用程序为商家获取支付授权,访问小票打印机或POS系统等外设的唯一方式。\\t
  • 打印机 - 大部分支付终端都会包含内置的小票打印机,用于打印交易小票。\\t
  • 密码键盘 - 用于安全地输入PIN码、金额和处理支付交易所需其他信息的数字键盘。\\t
  • 支付应用程序 - 让一切组件配合工作,借此让商家正常处理支付的软件。这种软件负责在读卡器、显示屏以及支付的处理方/受让方所需的其他接口之间进行协调。\

除了终端本身,大部分终端供应商还会提供其他服务/功能,例如:

\\
  • 终端/资产管理 - 借此可远程管理每个终端的维护、软件更新、技术支持等工作。\\t
  • 安全性管理 - 借此管理读卡器配置、加密密钥等内容。\

然而大部分终端都将其视作单独的组件,只向这些物理和逻辑组件提供了非常底层的访问(大部分情况下只提供设备驱动层面的访问)。虽然对开发者来说,这样的做法听起来极为灵活,可以让开发者按照需要的任何方式使用这些组件,但却会在集成、安全性、认证等方面造成挑战。

\\

集成方面的挑战

\\

所有支付终端都带有一个操作系统(也叫做“应用控制器”),并可通过不同程度的可编程性和访问能力让用户访问终端硬件的核心功能。通常,终端都会为应用程序开发者提供SDK,借此开发者可以构建自己的应用程序,开发好的程序需要首先提交并进行认证,随后才允许安装到商家使用的真正的支付终端上。

\\

每个应用程序可以提供一系列截然不同的功能,通过终端上的应用程序控制器接口供给商家使用。然而能帮助这些应用程序相互配合使用的框架或接口很少,甚至完全没有,这导致商家需要运行各种相互独立的应用程序。例如当我们在商店购物时,面对不同需求,商家必须使用不同的按键组合来调用不同的应用程序(例如礼品卡或信用卡,信用卡或借记卡等)。

\\

安全性方面的挑战

\\

针对这些平台构建的应用程序通常运行在安全的环境中,因此需要满足PCI委员会、银行卡网络以及收单银行的所有安全需求。

\\

然而尽管这些安全需求对保护敏感的客户支付卡信息来说是必不可少的,但实现起来需要付出一定的代价。

\\
  1. 额外的需求导致支付应用程序的开发程本激增\\t
  2. 需要更长时间的测试和认证过程,并且\\t
  3. 部署时间进一步延后导致新功能的效益大幅降低,而不灵活的软件管理也会对软件开发周期产生不利影响\

认证方面的挑战

\\

正如上文所述,每个支付终端必须获得不同监管机构与金融组织的各种严格认证,随后才能部署到商家店铺内处理交易。这些认证包括俗称的L1认证(接触式和非接触式,硬件和通信层认证)、L2认证(接触式EMVCo认证,以及不同支付网络的非接触式认证),同样重要的还有运行了支付应用程序的终端需要集成到的每个收单银行/处理银行所要求的认证。这些认证过程需要通过额外的测试工具(相当昂贵)运行并评估支付网络所定义的所有测试案例,随后才能提交并等待必要的批准。

\\

构建平台

\\

面对这些挑战,考虑到我们的目标是促进更简单的集成和集成式体验,我们的方法首先会将硬件和软件组件拆分为多个抽象层,并根据集成方面的需求将相关功能以API的形式暴露。

\\

这一过程中我们建立了一些核心的基本原则:

\\
  • 终端的每个组件都有API(API为先的方法) - 从渲染自定义的UI消息并显示在屏幕上,到通过处理银行处理交易,一切都通过API的方式进行。\\t
  • 数据和API可扩展到终端之外 – 可以通过简单的RESTful外部接口供任何需要的系统或应用程序使用。\\t
  • 应用内部,以及应用与外部组件的互操作性是必备条件。\\t
  • 应用之间不进行一对一的自定义集成。\\t
  • 与生俱来的安全性 – 安全性不再仅仅是可选项。\\t
  • 简化集成 – 无需自定义工具,开发者可以使用任何主流的现代化开发和排错工具。\

按照这些原则,我们定义了下列核心服务来抽象必要的功能:

\\

(点击放大图像)

\\

23b5dd93eb6ba53e1357de4c9bb20cda.jpg

\\
  • 读卡器服务(Card Reader Service) - 我们并未直接提供底层的读卡器访问接口,因为这会让任何人均可访问敏感的银行卡数据,相反我们会为需要的应用程序提供处理银行卡数据的功能API。例如执行卡片交易进行支付,读取非银行卡中的会员信息等。读卡器服务内的所有数据都被加密,因此可彻底杜绝将任何敏感数据暴露给应用程序,进而需要进行PCI合规认证的情况。\\t
  • 商务服务(Commerce Service) - 为各种与商务有关的功能提供支持,例如订单管理、交易管理、客户管理、分类/产品等,并且通过这种方法可以用一致的方式呈现与商务有关的各类数据源。这些商务服务也成为终端中运行的所有应用程序相互实现互操作,实现不同商务活动的核心集成点。\\t
  • 支付体验(Payment Experience) - 为所有支付方法提供标准化的体验,同时省略了为每个集成分别进行支付验证所造成的不必要的负担。\\t
  • 配件管理服务(Accessory Management Service) - 提供了包含不同服务的目录,借此处理连接到终端的各种外部附件(例如打印机、磅秤、现金抽屉、登记簿、POS系统等)的连接,并通过更简单的方法与其交互。我们为不同类型的配件定义了不同的API合约。例如现金抽屉配件的接口只提供了简单的\"open()\"和\"isOpen()\"方法,并不提供向所连接的抽屉发送打开指令的底层USB命令。\\t
  • 能力管理服务(Capability Management Service) - 为平台安装的不同能力提供了一个统一的目录,借此可直接连接并使用不同能力。涉及到的能力包括交易处理、小票打印、会员忠诚计划、折扣、客户管理等。在跨越终端上运行的各种应用程序提供互操作性方面,能力管理功能扮演了重要的角色。\\t
  • 外部连接器服务(External Connector Service) - 通过这样的一个接口将终端可用的大部分接口暴露给通过USB、蓝牙或网络连接的外部应用程序。\\t
  • 云服务(Cloud Service) - 通过必要的接口将终端上运行的服务扩展至终端范围之外。这些服务可用于访问同样的功能,但更重要的是,可用于通过云平台访问同样的商务数据,借此即可轻松访问云端运行的应用。云服务还为读卡器、安全密钥管理等组件提供了必要的配置管理功能。\

为了从实现以及集成的角度展示这些组件的配合方式,我们将以Poynt智能终端上进行的一次端到端支付交易流程为例进行介绍。

\\

在终端上,每次交易始于商户经营业务所用的应用程序。下列流程示意图展示了Poynt智能终端上处理交易时的所有步骤和阶段。红色高亮显示的内容代表相应服务提供的功能API。

\\

(点击放大图像)

\\

c91e79194bd4d99748cb8670f14b0ce7.jpg

\\

总结

\\

虽然整个过程看似十分冗长,但尤其需要注意下列几个重点:

\\
  • 功能API(Functional API) - 通过更高层的抽象大幅降低了集成的工作量。\\t
  • 服务发现(Service Discovery) - 发现终端上可用服务的能力使得开发者可以灵活查找最能满足应用程序需求的服务。无论是用于发送邮件的服务,或处理交易的服务,甚至渲染一个界面向顾客收集信息的服务,以编程的方式发现并连接服务的能力不仅为应用开发者带来了巨大价值,而且大幅提高了整个平台的可扩展性。\\t
  • 资源模型(Resource model) - 取决于组件/服务的具体类型,虽然每个组件的API在协议格式上可能有所不同,但跨越不同组件/服务提供并维持一致的数据模型对互操作性的实现起到了极为重要的作用。\\t
    • 这不仅有助于无需太多转换即可跨越不同API传输数据,而且有助于将数据模型扩展为RESTful API供云中运行的应用程序使用。\\t
    \\t
  • 通过标准化API接口实现互操作性 - 虽然服务发现能力可以帮助我们在需要时方便地找到可用服务,但如果服务接口没有实现标准化,并且并非由平台预先定义的,那么在集成方面所起到的价值将非常有限。为整个平台所支持的全部能力和配件服务定义并提供标准化接口框架是让整个平台获得更高扩展能力的关键步骤。我们不可能预测出未来的所有需求和可能需要的功能与配件,因此这也是一个持续发展的步骤,借此可以帮助开发者通过形成一个生态体系自行定义自己需要的内容。\

这种以API为先的方法对任何公司或产品来说都有一定的必要性,借此可以更好地专注于系统和(内部与外部的)应用程序相互集成和互操作的方法,进而推动整个平台获得更大的成功。

\\

关于本文作者

\\

d54ea5a8051b22ff3b01f99b930ad6c7.jpgPraveen Alavilli 是Poynt的资深创始工程师,一举促成了Poynt智能终端及其开放式商务平台的技术基础,并通过努力让该平台面向支付技术的未来做好了准备。在加入Poynt之前,Alavilli曾在PayPal、eBay、Amazon和AOL等支付、身份、身份验证和安全领域的不同公司担任架构师和技术主管职位。Alavilli长期拥护开放式标准和开放的开发者生态系统。

\\

阅读英文原文:An \"Integration-First\" Approach to Building a Commerce Platform for Payment Terminals

\\

这篇关于通过“集成为先”的方法为支付终端构建商务平台的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_34365635/article/details/89099634
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/272871

相关文章

CentOS7增加Swap空间的两种方法

《CentOS7增加Swap空间的两种方法》当服务器物理内存不足时,增加Swap空间可以作为虚拟内存使用,帮助系统处理内存压力,本文给大家介绍了CentOS7增加Swap空间的两种方法:创建新的Swa... 目录在Centos 7上增加Swap空间的方法方法一:创建新的Swap文件(推荐)方法二:调整Sww

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

Oracle 通过 ROWID 批量更新表的方法

《Oracle通过ROWID批量更新表的方法》在Oracle数据库中,使用ROWID进行批量更新是一种高效的更新方法,因为它直接定位到物理行位置,避免了通过索引查找的开销,下面给大家介绍Orac... 目录oracle 通过 ROWID 批量更新表ROWID 基本概念性能优化建议性能UoTrFPH优化建议注

Pandas进行周期与时间戳转换的方法

《Pandas进行周期与时间戳转换的方法》本教程将深入讲解如何在pandas中使用to_period()和to_timestamp()方法,完成时间戳与周期之间的转换,并结合实际应用场景展示这些方法的... 目录to_period() 时间戳转周期基本操作应用示例to_timestamp() 周期转时间戳基

在 PyQt 加载 UI 三种常见方法

《在PyQt加载UI三种常见方法》在PyQt中,加载UI文件通常指的是使用QtDesigner设计的.ui文件,并将其转换为Python代码,以便在PyQt应用程序中使用,这篇文章给大家介绍在... 目录方法一:使用 uic 模块动态加载 (不推荐用于大型项目)方法二:将 UI 文件编译为 python 模

Python将字库文件打包成可执行文件的常见方法

《Python将字库文件打包成可执行文件的常见方法》在Python打包时,如果你想将字库文件一起打包成一个可执行文件,有几种常见的方法,具体取决于你使用的打包工具,下面就跟随小编一起了解下具体的实现方... 目录使用 PyInstaller基本方法 - 使用 --add-data 参数使用 spec 文件(

Python的pip在命令行无法使用问题的解决方法

《Python的pip在命令行无法使用问题的解决方法》PIP是通用的Python包管理工具,提供了对Python包的查找、下载、安装、卸载、更新等功能,安装诸如Pygame、Pymysql等Pyt... 目录前言一. pip是什么?二. 为什么无法使用?1. 当我们在命令行输入指令并回车时,一般主要是出现以

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格