系统架构


网关:负责对请求进行权限校验(对需要鉴权资源进行校验)、请求路由(根据不同的路由策略进行服务转发)、内外网隔离(外网访问收款通服务都必须由网关进行转发)、若有需要可在网关进行扩展功能(如请求限流、服务降级、数据加解密等)。

收银台:收银台包含H5收银台、PC端收银台、POS收银机程序、收银服务、POS收银服务和收银小程序,收银服务负责调用支付平台进行交易。

支付平台:支付平台包含了2个部分,一个是支付配置管理,另一个是支付核心。支付核心是对交易渠道的若干支付功能进行封装。包含了对微信的主扫、小程序支付等模式接入,支付宝接入主扫和小程序支付等模式,云闪付接入APP支付等。
交易渠道:渠道包含了支付宝、微信、银联等三方渠道。

passport统一权限管理平台:对经营组织、用户、角色、权限、资源进行管理和认证。

对账平台:对商城订单数据、支付中心交易数据、渠道数据、ERP订单数据进行收集,并根据各个公司对账需求进行对账。

对接场景

项目划分

后端JAVA工程

fssc-gateway 内网网关(接入IDM,负责设置header)

payment-gateway 外网网关

passport-auth-center passport认证中心服务

ppassport-web-apiassport web端接口服务

cashier-api 收银台服务

cashier-web-api 收银台web api服务

cqp-payment 支付中心核心服务

cqp-payment-admin-api 支付后台管理api服务

reconciliation-platform-api 对账平台web api服务

reconciliation-platform-task 对账平台任务服务

前端工程:

cashier-h5 h5收银台工程

cahiser-pc PC收银台工程

cqp-checkfile 三方校验文件工程

passport-web passport用户管理web端

payment-platform-web 支付后台管理web端

reconciliation-platform-web 对账平台web端

cashier-mini 小程序工程

cashier-destop 收银台桌面端exe

cashier-app 收款通APP(安卓)

代码结构

后端代码结构

Dao:数据访问层,与数据库的交互放这里;
Entity:数据库实体类,所有数据库实体类放这里;
Service:业务逻辑接口层
–Impl:业务逻辑实现
Controller:前端访问控制层
VO:视图层模型
DTO:数据转换模型
Common:公共服务
Utils:工具类

前端代码结构

├── node_modules/ # npm安装的依赖包
├── public/ # 静态资源文件夹
│ ├── favicon.ico # 网站图标
│ └── index.html # 主HTML页面模板
├── src/ # 源码目录
│ ├── assets/ # 静态资源,如图片、字体等(需要编译处理)
│ ├── components/ # 全局组件
│ ├── views/ # 页面级别的Vue组件
│ ├── router/ # 路由配置文件夹
│ │ └── index.js # 路由配置文件
│ ├── store/ # pina状态管理相关文件夹
│ ├── App.vue # 根组件
│ ├── main.js # 入口文件,初始化Vue应用
│ ├── styles/ # 全局样式文件夹
├── .gitignore # Git忽略文件
├── package.json # 项目依赖和脚本配置文件
├── vite.config.js # Vite配置文件(如果是用Vite创建的项目)
├── README.md # 项目说明文档

代码

git仓库地址:http://172.30.155.37:3000/

代码提交忽略文件:

target/
!.mvn/wrapper/maven-wrapper.jar
!/src/main/
!/src/test/
logging.path_IS_UNDEFINED/
/**/src/main/resources/rebel.xml

STS

.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

IntelliJ IDEA

.idea
*.iws
*.iml
*.ipr

NetBeans

/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/

VS Code

.vscode/
/.gradle/

spy.log
*/.log
.history/*

前端增加新的网页

资源配置

权限配置

发布

发布测试

  1. 合并到cicd分支(分支名称用release-cicd前缀,如 release-cicd-dev-1.3.1),备注[ci]修改内容,平台会自动触发构建。
  2. 进devops平台,找到这个构建镜像,进详情,点部署。
    https://test-cicd.cq-p.com.cn/app

生产发布

  1. 手动上传到天翼云镜像仓库
  2. 手动更新

后端开发

本地启动

本地启动需要修改bootstrap.yaml的配置文件到本地
设为local

外部接口开发-增加签名

增加 @CustomSignature 注解自动进行验签

接口请求签名算法

signContent:待签名串(签名内容)
secret:由收款通–收银台分配
sign = MD5(signContent +&secret).toUpperCase();
说明:
将请求报文中除 sign 之外的其它节点以转化成 <key, value> 键值对,按 key 的顺序排序后转化成如下格式字符串:
key1=value1&key2=value2
示例:
将请求参数转换成<key,value>键值对,按照Key的顺序升序排列,转换成如下字符串:
signContent = key1=value1&key2=value2&key3=value3

接口返回签名算法

收款通返回也进行了签名,需要接入方对返回结果进行验签。
{
private Integer code; //响应码
private String message: //响应信息
private String data: //响应数据
private String sign; //响应签名
};
签名算法:
sign=MD5(code=x&message=y&data=m&appSecret=k).toUpperCase();

公共请求参数

字段 类型 参数说明
appId String appId,收款通负责分配
timestamp String 时间戳,格式yyyy-MM-dd HH:mm:ss,调用方和收银台服务时差在3分钟之内
nonStr String 12位随机字符串,防重,5分钟之后不能重复
sign String 签名
bizContent String 将业务参数JSON序列化之后填入此参数
method String 请求方法名,参考API接口列表

公共响应参数

字段 类型 描述
code String 响应码,200是成功,其余均为失败,失败在message中有失败原因
message String 响应信息
data String 响应数据,JSON格式
sign String 签名

文档更新时间: 2024-05-28 09:45   作者:张艺严