本文以电脑网站支付为例,着重对第三方支付通道的接入进行了分析,包括支付宝支付接入、微信支付接入及银联支付接入。
1、支付宝支付接入
支付宝支付能力主要有当面付、刷脸付、App支付、手机网站支付、电脑网站支付和花呗分期等,本文采用电脑网站支付实现聚合支付系统的支付宝支付功能。
要在应用中开通电脑网站支付能力首先需要登录支付宝开放平台在开发者中心创建应用并且申请开通相关开放产品使用权限,为了保证交易双方的身份和数据安全,开发者在调用接口前需要配置双方密钥对交易数据进行双方校验。如下图1所示为支付宝开发接入流程简单示意图。
图1 支付宝支付开发接入流程
支付宝开发平台支持RSA(SHAlWithRSA)和RSA2(SHA256WithRSA)两种签名算法,RSA2签名算法比RSA有更强的安全能力。签名的过程即生成签名方将传送的消息用私钥加密的过程,验签则是指验签方使用公钥对消息进行验证的过程。签名和验签的具体内容如下:
生成签名方:首先对参数放入一个字符串数组signFields,将参数和值保存在一个对象或Map里,通过JSONObject将其变更为JSON对象,接着是签名原文的生成,在生成的过程中可以通过Java的Arrays.sort实现参数按照字典的次序进行排序,继而通过RSA的私钥对其实施签名。
验签方:与签名构建方一样先生成签名原文,其次通过RSA的公钥生成签名方传入的签名,把签名原文对生成签名方传入的签名进行验证,验证结果为true则表示验证成功。
应用创建、应用配置以及SDK集成并配置完成后就可以调用具体的接口了。
如下图2所示为支付宝电脑网站支付的接口调用时序图。
图2 支付宝电脑网站支付接口调用时序图
其中returnUrl表示同步回调即前台通知:第三方支付系统以浏览器重定向的形式将支付结果返回给商户端。notifyUrl表示异步通知即后台通知:第三方支付系统使用类似于HttpClient技术调用商户接口进行通知。前台通知的作用主要是提示给用户支付的状态,异步通知将支付结果安全的推送给商户端从而进行修改对应的订单状态,支付是否成功以异步通知为准。
2、微信支付接入
微信支付主要支持付款码支付、Native支付、JSAPI支付、APP支付、H5支付和小程序支付等,本文采用微信Native支付实现聚合支付系统的微信支付功能。
如下图3所示为微信支付开发接入流程简单示意图。
图3 微信支付开发接入流程
其中,微信Native支付可分为两种模式,商户可根据支付场景选择相应的支付模式。本文采用的是微信Native支付中的模式二,模式二与模式一相比流程更为简单,不依赖设置的回调支付URL。为了保证交易双方数据的安全性,需要对发送的数据进行签名,签名算法可以采用MD5算法或者HMAC-SHA256算法,请求和接收数据均需要校验签名,具体的签名方法如下:
第一步,用集合M表示全部发送或者接收到的内容,按参数名ASCII码从小到大以字典序将集合M内非空参数值的参数进行排序,根据URL键值对的格式(即 keyl=valuel&key2=value2...)拼接成字符串 stringA。
第二步,将key拼接至stringA结尾生成字符串stringSignTemp,同时使用MD5算法或HMAC-SHA256算法实施对stringSignTemp的计算,接着把运算结果中所有字符变更成大写,从而得到sign值sign Value。
要接入微信支付开发者还需要集成服务端SDK,应用创建、支付申请以及SDK集成并配置完成后就可以调用具体的接口了。如下图4所示为微信Native支付的支付接口调用时序图。
图4 微信Native支付接口调用时序图
3、银联支付接入
银联支付主要支持在线网关支付、无跳转支付、手机网页支付以及企业网银支付等,本文采用的支付方式是银联全渠道支付的在线网关支付。如下图5所示为银联支付开发接入流程简单示意图。
图5 银联支付开发接入流程
要为应用开通银联在线网关支付能力,开发者首先需要登陆到银联官网进行注册登陆并申请入网,然后申请获取签名证书、验签证书以及敏感信息加密证书等相关证书,签名证书和验签证书的使用方法如下:
签名证书:首先通过key=value的方式根据名称来将报文里签名域(signature)以外的全部数据元排序,并且使用“&”将其拼接成待签名串。此外,使用SHA-256算法对待签名串进行摘要运算,通过银联颁发的签名证书中的私钥以及SHA-256签名算法对摘要进行签名运算。
然后对签名串进行Base64编码操作并放入签名表单域中,而后利用HTTP Post的传输形式把签名表单域连同其他表单域一块传输至银联支付平台。
验签证书:首先通过key=value的方法将报文中签名域(signature)以外的全部数据元根据名称实现升序排序,并且使用“&”将其拼接成待签名串。除此之外,还需要使用SHA-256算法对待签名串执行摘要运算,然后还需要通过在银联申请的验签证书里的公钥对摘要以及报文中的签名信息执行签名验证运算。
要接入银联在线网关支付还需要在项目中集成并配置银联SDK,应用创建、入网申请、证书获取以及SDK集成并配置完成后就可以调用具体的接口了。如下图6所示为银联网关支付的支付接口调用时序图。
图6 银联在线网关支付接口调用时序图