深圳幻海软件技术有限公司 欢迎您!

外联网关平台实践之车支付渠道改造

2023-02-28

1.项目背景车支付系统对接很多的外部渠道,如苹果支付、支付宝、微信、银联等,在实际开发与实施的过程中,发现了其中存在的一些问题,比如:需要一定精力在与渠道进行非业务逻辑的联调与测试。渠道的对接可能分布在不同的业务子系统中,没有进行统一有效的出口管控。针对以上类似问题,外联网关应运而生,以保证内部系统

1.项目背景

支付系统对接很多的外部渠道,如苹果支付支付宝、微信、银联等,在实际开发与实施的过程中,发现了其中存在的一些问题,比如:

  • 需要一定精力在与渠道进行非业务逻辑的联调与测试。
  • 渠道的对接可能分布在不同的业务子系统中,没有进行统一有效的出口管控。

针对以上类似问题,外联网关应运而生,以保证内部系统与外部系统之间进行安全、有效、便捷的通讯。

2.设计方案

2.1系统交互流程图

简单来说,系统的主要功能就是通过对请求的一些配置,选择系统预置的一些插件(系统内置了常用的通讯协议、加签验签、加密解密过程,也可以通过规则引擎脚本实现对请求和响应数据的个性化处理),以实现在不编写代码的情况下,实现对请求的鉴权、参数预处理、参数与响应结果映射等。让业务开发同学更关注业务逻辑。

平台还提供Mock数据的能力,在外部接口未提供可调用环境时,可以根据渠道提供的文档,进行Mock数据的返回。

系统提供两种接入方式:

  • 客户端如果采用spring cloud,可以接入统一注册中心Consul;
  • 如果是其他系统,可以通过HTTP方式调用。

3.实践过程

在获取到对接方的接口文档之后,通过分析接口的通讯与鉴权方式,在外联网关的配置管理后台配置相应的参数,配置完成之后会有相应的模板编号,客户端通过模板编号+对接接口的请求参数进行接口的请求。

3.1组管理

系统通过组管理,对同一系列的接口的通用配置,实现对一个外部渠道中一个或多个接口的的请求响应处理配置,包括:

  • 加签验签
  • 加密解密
  • 预设字段

系统预置加密及签名:

  • 加密分为三种:

对称加密(symmetric),例如:AES、DES等

非对称加密(asymmetric),例如:RSA、DSA等

摘要加密(digest),例如:MD5、SHA-1、SHA-256、HMAC等。

  • 摘要算法:


算法

说明

MD5-LOWER

摘要函数-128位-小写

MD5-UPPER

摘要函数-128位-大写

SHA-1

摘要函数-160位

SHA-256

摘要函数-256位

SHA-384

摘要函数-384位

SHA-512

摘要函数-512位

SHA1withRSA

QQHrf5xD">先用 SHA-1 去摘要,然后使用 RSA 加密

SHA256withRSA

摘要后加密

SHA384withRSA

摘要后加密

SHA512withRSA

摘要后加密

MD2withRSA

摘要后加密

MD5withRSA

摘要后加密

  • 加解密算法:

算法

说明

备注

AES

对称加密。更快,兼容设备,安全级别高

AES|128|AQIDBAUGBwgJAAECAwQFBg==|AES/CBC/PKCS5Padding

DES

对称加密。本地数据,安全级别低


RSA

非对称加密。有公钥和私钥


SM4

国密算法-对称加密SM4

encrypt_key、decrypt_key配置通过“|”间隔key和iv

注意:

AES|秘钥长度|IV向量(byte-->Base64)|AES/mode (加密模式)/padding (填充方式)

AES|128|AQIDBAUGBwgJAAECAwQFBg==|AES/CBC/PKCS5Padding

  • 签名策略(SignStrategyEnum)

简写

过程

KV_JOIN_BODY_URL

对请求参数中body和urlParam值,根据配置的连接方式组成字符串

V_JOIN_BODY

请求参数(body)值拼接

V_JOIN_BODY_SORT

请求参数(body)值拼接(需排序)

KV_JOIN_BODY_HEADER

对请求参数中body和header值,根据配置的连接方式组成字符串

KV_JOIN_BODY_ENCRYPT

对请求参数中body和encrypt(加密前)值,根据配置的连接方式组成字符串

KV_JOIN_BODY_ENCRYPTED

对请求参数中body和encrypt(加密后)值,根据配置的连接方式组成字符串

BODY_JSON

对请求参数中body数据转换为JSON字符串

BODY_ENCRYPT_SORT_JSON

body+encrypt 参数字段排序后 json 化

BODY_JSON_RSA

对请求参数中body数据转换为JSON字符串在经过RSA加密(Base64编码)

ENCRYPT_RSA

对请求中的加密字符串进行再签名

V_JOIN_HEADER_NO_SORT

header 内容拼接,无排序

KV_JOIN_BODY_URL_REJECT_SIGNMETHOD

对请求参数中body和urlParam值,根据配置的连接方式组成字符串,并且剔除SingMethod的key和value

  • 验签策略(VerifySignStrategyEnum)

简写

过程

V_JOIN_BODY

请求参数(body)值拼接

BODY_SORT_JSON

返回结果集字段排序后 JSON 化

BODY_SORT_JSON_E_WALLET

返回结果集字段排序后 JSON 化(E钱包专用)

  • 签名盐值位置:

标识

说明

left

拼接左侧

right

拼接在右侧

both

两侧都有

  • 加密策略(EncryptStrategyEnum)

简写

过程

SPECIFIC_JSON

在请求体​​encrypt​​中指定要加密的内容,转换成JSON字符串

BODY_JSON

在请求体​​body​​中指定要加密的内容,转换成JSON字符串

  • 解密策略:

简写

过程

SPECIFIC_JSON

指定的字段,解密后为JSON字符串

  • 接口预设参数:

{
 "body": {
  "requestNo": "$simple_uuid$",
  "requestTime": "$millisecond_long$",
  "charset": "UTF-8",
  "signType": "SHA256withRSA",
  "encryptType": "AES"
 }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

示例:$simple_uuid$

预设值

类型

说明

simple_uuid

String

UUID

millisecond_long

Long

毫秒

timestamp_long

Long

时间戳

持续完善中



3.2请求项配置

在配置好接口组之后,接下来就可以通过对请求项实现对某一个接口的具体配置,其中包括:

  • 选择对应的接口组
  • 是否需要Mock数据
  • Mock数据的模板配置(每个属性由 3 部分构成:属性名、生成规则、属性值,可以实现返回动态Mock数据。)
  • 请求的方式(POST、GET)
  • 请求与响应的Content-type,编码格式等
  • 请求超时的配置
  • 请求参数映射(参数名称的转换)
  • 请求参数脚本(通过规则引擎脚本对请求参数进行二次处理)

Mock模板示例:

'name|min-max': value
'name|count': value
'name|min-max.dmin-dmax': value
'name|min-max.dcount': value
'name|count.dmin-dmax': value
'name|count.dcount': value
'name|+step':
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

3.3模板配置

模板是打包一个或者多个请求(目前仅支持一个,后续通过接入规则引擎平台,实现对请求项的编排能力),对外暴露给客户端,通过模板编号进行请求。

 4.规划 

外联平台目前实现了基本的对请求的处理与封装,还是有很多需要集成与完善的功能,比如对请求的监控与性能统计,直观感受外部接口的响应效率,更好的优化自己的系统。

还有可以接入规则引擎系统,可以实现对请求更灵活的配置,让系统更加灵活,适应更多的场景。

 5.总结 

外联网关是针对请求外部接口的一套实现方案,以低代码的形式实现复用,以减少接口对接工作量为目标,最终实现提高工作效率,实现对接口的统一管理与控制,确保交易在各支付渠道之间安全、无缝的传递。

  • 作为之家内部业务系统与外部系统的隔离与统一管理:
  • 实现外部支付清算系统的统一接入和接入管理;
  • 完成通讯协议及信息的转换;
  • 完成报文组包解包、报文解密和加密;
  • 完成信息的路由分发;
  • 完成报文的发送和接收。

作者简介:郑刚 

  • C端及中台产研中心-效能平台部-业务平台团队。
  • 2017年加入汽车之家,主要负责中台及金融相关业务服务器端设计与开发工作。