本文以中国银联全渠道支付为例,介绍商户开发者或支付平台如何接入中国银联全渠道统一支付接口。
全渠道统一支付接口主要适用于签约商户改造的服务商(包括收单机构),在商户改造过程中统一接入中国银联卡支付、二维码支付、刷脸支付及后续新增中国银联支付产品时的接入场景。
1、技术准备
在技术人员接入开发之前,商户的商务、技术人员和中国银联本地分公司商户服务部需要确认以下内容:
(1)对接入的产品和方案进行商务洽谈,提交正式入网申请,确定合作意向和业务需求;
(2)与中国银联技术服务人员确认服务设计方案、技术接口和技术接入方案选型;
(3)双方签订合作协议,确定技术接口人;
(4)成立相关技术项目组进行系统对接,并且制定相关项目的整体计划;
(5)中国银联提供相关示例程序(Demo)、开发者接入文档。
在从中国银联平台上获取到有关Demo和文档之后,商户开发者就可以从零开始搭建自己的支付模块或系统了,并使用中国银联开放服务平台服务端SDK快速接入网关支付产品,完成与中国银联全渠道的统一支付接入和对接开发工作。
2、技术实现
1.入网注册
进入中国银联开放平台的商户服务门户网站(见图1),注册相关商户资料,完成注册后,进入“自助入网测试”页面。
图1
在申请注册完毕之后,选择对应的支付产品(手机无线收款产品、PC收银台、二维码支付、缴费类、代收代付等产品),并根据商户所在地选择对应的收单机构,最后上传入网审核资料。中国银联根据审核结果提供以下测试(沙箱)环境的证书和服务器相关的测试API URL地址。测试相关参数如图2所示。
图2
2.获取证书
商户会获取签名证书、敏感信息加密证书和验签证书。
1)签名证书&敏感信息加密证书
首先,商户后端对中国银联接口报文中出现的签名表单域(signature)之外的所有数据(全渠道产品参数和商户订单参数)采用“key=value” 形式按照名称排序,然后以“&”作为URL连接符拼接成待签名串。
其次,对待签名串使用SHA-256算法做摘要,再使用中国银联颁发给商户的签名私钥证书中的私钥对摘要做签名操作(签名算法选择SHA-256)。
最后,对签名做Base64编码,将编码后的签名串放在签名表单域里,和其他表单域一起通过HTTP POST方式传输给中国银联全渠道支付平台。
2)验签证书
中国银联接口响应返回的数据,对待签名串使用SHA-256算法做摘要,再使用商户入网时中国银联提供的验签公钥证书中的公钥对摘要和报文中的签名信息做签名验证操作。
注意:不要采用中国银联自定义的key,如果采用相同的key,则在解析参数数据时,程序将无法区分两个相同的key对应的内容。
3.集成支付功能
中国银联开放平台为了帮助开发者调用开放接口,提供了开放平台服务端SDK,目前仅包含Java版本,封装了参数签名&验签、HTTP网络接口请求等相关基础功能。请先下载对应语言版本的SDK或API并引入商户应用开发工程。
从图3可以看出,商户开发者不需要直接与银行或发卡机构进行开发,就可以接入各种银行卡的支付方式。
图3
顾客在签约中国银联的电子商户网站或在商业移动应用中购买消费品并使用银行卡支付时:
(1)电子商户网站(移动应用)会与商户后端服务进行通信,将商品信息和顾客信息传给后端服务,生成商户自己的商品订单数据;
(2)商户后端服务调用中国银联支付网关的统一支付接口。也可以是其他接口,这需要依据商户自身的产品特点来选择,例如无跳转支付、在线网关支付、手机WAP网页支付、企业网银支付等;
(3)中国银联支付网关将相关交易指令在银行网络(金融数据通信网)中进行操作,返回或通知给商户后端服务相关支付结果。
支付消费接口(本文以支付消费接口为例,不再一一讲解退款、查询、预授权等接口)指境内外持卡人在从事商贸活动的商户的移动应用或电子商网站进行购物等消费时,使用中国银联的银行卡进行支付结算的交易,经中国银联和发卡行批准的消费额将即时反馈到该持卡人的银行卡账户余额上。
支付消费接口一般采用HTTPS网络协议,采用POST方式传送数据。
中国银联会提供两个接口,对应软件研发流程中的两个环境。
(1)研测环境:开发人员和测试人员专门用于开发、测试流程的运行环境,在软件公司中,这个研测环境仍会再细分成开发环境和测试环境,在开发环境中由客户端和服务端研发人员共同主导搭建,其相关配置具有实验性,也会比较随意。为了开发、调试方便,日志较为丰富,模拟数据也会较为随意。而测试环境一般是模拟生产环境来定义的,会有较多的数据验证过程、自动化测试工具及步骤。
(2)生产环境:指正式对外运营或服务的环境,一般由测试人员发布,运营和运维人员主导,在这个环境中研测数据会被清空,并且一般会关掉不必要的调试、开发日志等,同时会打开监控日志和错误收集日志等。
研发人员需要在这两个环境中使用代码切换不同的环境URL。下面使用Spring框架中的profile功能实现对不同环境的切换。
首先,在配置文件Application.xml中定义profile节点,可以通过定义profile功能将开发、测试和生产环境的相关配置分开,这里定义了三个profile节点:dev(开发环境)、test(测试环境)、prod(生产环境)。代码如下:
然后,定义默认的profile,在没有指定任何profile的情况下,默认的profile内定义的内容将被使用,通常可以在web.xml(或者application.xml)中通过定义全局servlet上下文参数spring.profiles.default来实现:
最后:激活对应环境中的rofile,Spring框架为我们提供了大量的激rol配置的方法,可以通过代码来激活,例如使用以下代码:
也可以通过运行参数、系统环境变量、JVM参数、 servlet 上下文参数来定义spring.profiles.active等参数,激活对应的profile,这里通过定义运行参数实现:
在生产环境中,以Tomcat Web服务器为例,我们在开发Web服务器的启动脚本start.sh中加入以下JVM参数:
如果不指定对应的环境,则应用将采用原来的默认环境,也就是开发环境。
接入支付消费接口,标准请求代码摘自中国银联系统Demo,代码如下:
这样,以上支付消费接口就接入完毕了。除了支付消费接口,其他接口的接入步骤基本一致,这里就不一一赘述了。
支付消费接口的HTTP请求体报文如下:
& orderld=商户订单号& bizContent=参数集合,是JSON格式 :
4.结果通知
中国银联在支付成功或失败时,会调用接口数据中传送的商户前端或后端URL地址,进行支付结果通知,这也意味着商户后端服务(公网可访问)会收到一个HTTP请求,这个请求来自中国银联支付服务器。这里以后端通知支付结果为例:
5.异常处理
在通知回复商户后端服务时会出现各种各样的异常(可参考银联开放平台的相关文档),需要商户开发者处理和回复中国银联支付网关。
这些异常可分为以下几类。
(1)参数缺失或不正确。例如:支付接口版本号不正确;交易类型不在指定范围内;签名等必填字段缺失,这些都需要返回中国银联服务接口“Invalid request.” 字符串。若交易类型和请求地址校验有误,则需要返回“Invalid request URI.”字符串。
(2)验证签名失败。这一般是由于数据报文遭遇劫持或篡改,导致的通知数据验证不通过。还有一种情况是在参数中带特殊字符。我们在请求时特别要注意对特殊字符进行过滤、处理和还原。
(3)中国银联支付网关返回错误应答码和应答描述信息,可以在中国银联的公共平台上查询对应的详细描述。
(4)触发交易风控。例如:订单交易时间超长;交易金额超过每日限额;账号操作频繁;信用卡使用地点与常用地点偏差过大等。
(5)其他类型的错误。例如:网络请求错误;请求超时;HTTPS握手错误,等等。
3、测试
在接入中国银联全渠道API之后,就可以使用测试环境地址进行测试了。目前中国银联也提供了以下内容供商户测试,特约商户或第三收单机构为中国银联提供测试人员协助测试。
·测试支付卡:类似于中国银联银行借记卡。
·证件号:模拟身份证号码。
·手机号:模拟移动手机号码。
·密码:默认密码。
·姓名:全渠道。
·短信验证码:123456(WAP/控件)、11111(PC)。注意:要在单击“获取短信验证码”按钮后再输入短信验证码。
中国银联还提供了测试后端供商户进行跳转类型的测试工具。
商户测试人员在完成测试之后需要提交测试报告、请求报文数据、通知回复数据等测试资料给中国银联测试人员。
中国银联测试人员在确认测试数据和业务流程之后,进行清档及准许发布生产环境的回复,这样就完成了整个接入中国银联全渠道API的工作。