当前位置: 首页 > 科技观察

汽车支付渠道转型

时间:2023-03-18 10:10:09 科技观察

1.项目背景汽车支付系统接入了很多外部渠道,如ApplePay、支付宝、微信、银联等,在实际开发实施过程中,发现存在一些问题,如:需要一定的金额精力与渠道进行非业务逻辑的联调和测试。渠道的连接可能分布在不同的业务子系统中,没有统一有效的出口管制。针对以上类似问题,外网网关应运而生,以保证内部系统与外部系统之间安全、有效、便捷的通信。2.设计方案2.1系统交互流程图简单来说,系统的主要功能是通过request的一些配置来选择系统预设的一些插件(系统内置了常用的通讯协议,签名验证,加解密过程,也可以通过规则引擎脚本实现对请求和响应数据的个性化处理),无需编写代码即可实现请求的鉴权、参数预处理、参数和响应结果映射等。让业务开发同学更加关注业务逻辑。该平台还提供模拟数据的能力。当外部接口没有提供可调用环境时,可以根据通道提供的文档返回mock数据。系统提供两种访问方式:如果客户端使用springcloud,可以访问统一注册中心Consul;如果是其他系统,可以通过HTTP调用。3、实践过程拿到对接方的接口文档后,通过分析接口的通信方式和鉴权方式,在外网网关的配置管理后台配置相应的参数。配置完成后会有对应的模板编号,客户端通过模板。编号+对接接口的请求参数用于请求接口。3.1群管系统通过群管同系列接口的通用配置,实现外部通道中一个或多个接口的请求响应处理配置,包括:签名验证、加密、解密、预置字段、系统预置加密和签名:加密分为三种:对称加密(symmetric),如:AES、DES等非对称加密(asymmetric),如:RSA、DSA等摘要加密(digest),如:MD5、SHA-1、SHA-256、HMAC等摘要算法:算法说明MD5-LOWER摘要函数-128bit-小写MD5-UPPER摘要函数-128bit-大写SHA-1摘要函数-160bitSHA-256摘要函数-256bitSHA-384摘要函数-384bitSHA-512摘要函数-512-bitSHA1withRSA先用SHA-1进行摘要,再用RSA加密SHA256withRSA摘要再加密SHA384withRSA摘要再加密SHA512withRSA摘要再加密MD2withRSA摘要再加密MD5withRSA摘要再加密。更快、兼容的设备、高安全级别AES|128|AQIDBAUGBwgJAAECAwQFBg==|AES/CBC/PKCS5PaddingDES对称加密。本地数据,低安全级别RSA非对称加密。有公钥和私钥SM4国密算法-对称加密SM4encrypt_key,decrypt_key通过“|”配置intervalkey和iv注:AES|密钥长度|IV向量(字节-->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值,按照配置的连接组成字符串methodKV_JOIN_BODY_ENCRYPT针对请求参数中的body和encrypt(加密前)值,根据配置的connection将字符串KV_JOIN_BODY_ENCRYPTED形成为请求参数中的body和加密(encrypted)值,并根据配置组成字符串BODY_JSON到配置的连接方法将请求参数中的body数据转换为JSON字符串BODY_ENCRYPT_SORT_JSONbody+encrypt参数字段排序后,jsonifyBODY_JSON_RSA到请求参数中的body数据转换为JSON字符串,请求中的加密字符串经过RSA加密(Base64编码)后重新签名ENCRYPT_RSAV_JOIN_HEADER_NO_SORTheader内容拼接,无排序KV_JOIN_BODY_URL_REJECT_SIGNMETHOD根据配置的连接方法String组成请求参数中的body和urlParam值,并去除SingMethod签名验证策略(VerifySignStrategyEnum)缩写过程的key和valueV_JOIN_BODY请求参数(body)值拼接BODY_SORT_JSON返回结果集字段排序JSON化BODY_SORT_JSON_E_WALLET返回结果集字段排序JSON化(E钱包专用)签名盐值位置:标志描述左拼接左拼接右拼接右边两边都有加密策略(EncryptStrategyEnum)缩写过程SPECIFIC_JSON指定请求体中需要加密的内容encrypt并转化为JSON字符串BODY_JSON指定请求体中需要加密的内容并转化为JSON字符串过程SPECIFIC_JSON指定的字段,之后解密,JSON字符串接口预设参数:{"body":{"requestNo":"$simple_uuid$","requestTime":"$millisecond_long$","charset":"UTF-8","signType":"SHA256withRSA","encryptType":"AES"}}例子:$simple_uuid$默认值类型说明simple_uuidStringUUIDmillisecond_longLongmillisecondtimestamp_longLongTimestamp持续改进3.2请求项配置配置接口组之后,然后之后,就可以实现具体配置一个通过request项选择某个接口,包括:选择对应的接口组是否需要Mock数据的模板配置Mock数据(每个属性由of3parts:attributename,generationrule,attributevalue,可以返回动态的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':3.3模板配置模板是对一个或多个请求进行打包(目前只支持一个,然后通过接入规则引擎平台,实现编排请求项的能力),并暴露给客户端,通过模板编号请求。4.规划外联平台目前已经实现了对请求的基本处理和封装,但是还有很多功能需要集成和完善,比如请求监控和性能统计,直观感受对外接口的响应效率,以及更好地优化自己的系统。也可以对接规则引擎系统,可以实现更灵活的请求配置,让系统更加灵活,适应更多场景。5.总结外网网关是一套请求对外接口的实现方案。以低代码的形式实现复用,旨在减少接口对接的工作量,最终提高工作效率,实现接口的统一管控。确保支付渠道之间交易的安全无缝转移。作为家庭内部业务系统和外部系统的隔离和统一管理:实现外部支付清算系统的统一接入和访问管理;完成通信协议和信息的转换;完成报文的拆包、解密和加密;完成信息的路由分发;完成消息的发送和接收。作者简介:郑刚C端与中台产研中心-效能平台部-业务平台组。2017年加入汽车之家,主要负责中台及金融相关业务的服务端设计与开发。