Commit 63bbef99 authored by terrfly's avatar terrfly
Browse files

Merge remote-tracking branch 'origin/dev' into master

parents 48c5d532 49edc927
...@@ -9,37 +9,82 @@ ...@@ -9,37 +9,82 @@
# 该yml文件只配置与环境相关的参数, 其他配置读取项目下的配置项 # 该yml文件只配置与环境相关的参数, 其他配置读取项目下的配置项
# #
################################# #################################
server: server:
port: 9217 #设置端口为 9217 port: 9217 #设置端口
servlet:
context-path: / #设置应用的目录. 前缀需要带/, 无需设置后缀, 示例 【 /xxx 】 or 【 / 】
spring: spring:
servlet:
multipart:
enabled: true #是否启用http上传处理
max-request-size: 10MB #最大请求文件的大小
max-file-size: 10MB #设置单个文件最大长度
resources:
static-locations: classpath:/static #项目静态资源路径 (可直接通过http访问)
freemarker:
template-loader-path: classpath:/templates #freemarker模板目录
template-encoding: UTF-8
suffix: .ftl
settings:
classic_compatible: true # 如果变量为null,转化为空字符串,比如做比较的时候按照空字符做比较
number_format: '#' #数字格式进行原样显示,不加格式化字符例如 100,00
datasource: datasource:
# yml填写url连接串, 无需将&符号进行转义 # yml填写url连接串, 无需将&符号进行转义
url: jdbc:mysql://127.0.0.1:3306/jeepaydb?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false url: jdbc:mysql://127.0.0.1:3306/jeepaydb?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
username: root username: root
password: password:
druid:
# 连接池配置项
initial-size: 5 #初始化时建立物理连接的个数
min-idle: 5 #最小连接池数量
max-active: 30 #最大连接池数量
max-wait: 60000 #获取连接时最大等待时间,单位毫秒
# 检测相关
test-while-idle: true # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
test-on-borrow: false # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
test-on-return: false # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
time-between-eviction-runs-millis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
min-evictable-idle-time-millis: 300000 #连接保持空闲而不被驱逐的最小时间
validation-query: SELECT 1 FROM DUAL
# 是否缓存preparedStatement
pool-prepared-statements: false # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
max-pool-prepared-statement-per-connection-size: 20 # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计 通过connectProperties属性来打开mergeSql功能;慢SQL记录
filters: stat,wall
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
cache:
type: redis
redis: redis:
host: 127.0.0.1 host: 127.0.0.1
port: 6379 port: 6379
database: 1 #1库:运营平台 #2库:商户系统 #3库:支付网关
timeout: 1000
password: password:
# 注意:以下MQ配置需注意【如需使用activeMQ则需将rabbitMQ配置注释即可】 # 注意:以下MQ配置需注意【如需使用activeMQ则需将rabbitMQ配置注释即可】
profiles: profiles:
include: include:
- activeMQ - activeMQ
# - rabbitMQ # 需要安装延迟队列插件:https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq/ #- rabbitMQ # 需要安装延迟队列插件:https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq/
#- rocketMQ
#activeMQ配置 #activeMQ配置
activemq: activemq:
broker-url: tcp://localhost:61616 #连接地址 broker-url: tcp://localhost:61616 #连接地址
#rabbitmq配置 #rabbitmq配置
rabbitmq: # rabbitmq:
addresses: 127.0.0.1:5672 # addresses: 127.0.0.1:5672
username: guest # username: guest
password: guest # password: guest
dynamic: true # dynamic: true
virtual-host: / # virtual-host: /
#rocketmq配置
# rocketmq:
# name-server: 127.0.0.1:9876
# producer:
# group: rocket-group
#日志配置参数。 #日志配置参数。
# 当存在logback-spring.xml文件时: 该配置将引进到logback配置, springboot配置不生效。 # 当存在logback-spring.xml文件时: 该配置将引进到logback配置, springboot配置不生效。
...@@ -52,9 +97,26 @@ logging: ...@@ -52,9 +97,26 @@ logging:
#系统业务参数 #系统业务参数
isys: isys:
allow-cors: false #是否允许跨域请求 [生产环境建议关闭, 若api与前端项目没有在同一个域名下时,应开启此配置或在nginx统一配置允许跨域]
jwt-secret: t7w3P8X6472qWc3u #生成jwt的秘钥。 要求每个系统有单独的秘钥管理机制。 jwt-secret: t7w3P8X6472qWc3u #生成jwt的秘钥。 要求每个系统有单独的秘钥管理机制。
# 文件系统配置项(系统内oss, 并非云oss) #是否允许跨域请求 [生产环境建议关闭, 若api与前端项目没有在同一个域名下时,应开启此配置或在nginx统一配置允许跨域]
oss-file: allow-cors: true
root-path: /home/jeepay/upload #存储根路径 ( 无需以‘/’结尾 )
oss:
file-root-path: /home/jeepay/upload #存储根路径 ( 无需以‘/’结尾 )
file-public-path: ${isys.oss.file-root-path}/public #公共读取块 ( 一般配合root-path参数进行设置,需以‘/’ 开头, 无需以‘/’结尾 )
file-private-path: ${isys.oss.file-root-path}/private #私有化本地访问,不允许url方式公共读取 ( 一般配合root-path参数进行设置,需以‘/’ 开头, 无需以‘/’结尾 )
# [local]: 本地存储,所有的文件将存在放本地,可通过nfs, rsync工具实现多机共享;
# [aliyun-oss]: 将文件统一上传到阿里云oss服务器; 注意:需调整jeepay-oss/pom.xml中的aliyun-sdk-oss组件依赖方式
service-type: local
# 阿里云OSS服务配置信息
aliyun-oss:
endpoint: oss-cn-beijing.aliyuncs.com #endpoint 如: oss-cn-beijing.aliyuncs.com
public-bucket-name: bucket1 #公共读 桶名称
private-bucket-name: bucket2 #私有 桶名称
access-key-id: KEY_KEY_KEY #AccessKeyId
access-key-secret: SECRET_SECRET_SECRET #AccessKeySecret
...@@ -9,37 +9,82 @@ ...@@ -9,37 +9,82 @@
# 该yml文件只配置与环境相关的参数, 其他配置读取项目下的配置项 # 该yml文件只配置与环境相关的参数, 其他配置读取项目下的配置项
# #
################################# #################################
server: server:
port: 9218 # 设置端口为 9218 port: 9218 #设置端口
servlet:
context-path: / #设置应用的目录. 前缀需要带/, 无需设置后缀, 示例 【 /xxx 】 or 【 / 】
spring: spring:
servlet:
multipart:
enabled: true #是否启用http上传处理
max-request-size: 10MB #最大请求文件的大小
max-file-size: 10MB #设置单个文件最大长度
resources:
static-locations: classpath:/static #项目静态资源路径 (可直接通过http访问)
freemarker:
template-loader-path: classpath:/templates #freemarker模板目录
template-encoding: UTF-8
suffix: .ftl
settings:
classic_compatible: true # 如果变量为null,转化为空字符串,比如做比较的时候按照空字符做比较
number_format: '#' #数字格式进行原样显示,不加格式化字符例如 100,00
datasource: datasource:
# yml填写url连接串, 无需将&符号进行转义 # yml填写url连接串, 无需将&符号进行转义
url: jdbc:mysql://127.0.0.1:3306/jeepaydb?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false url: jdbc:mysql://127.0.0.1:3306/jeepaydb?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
username: root username: root
password: password:
druid:
# 连接池配置项
initial-size: 5 #初始化时建立物理连接的个数
min-idle: 5 #最小连接池数量
max-active: 30 #最大连接池数量
max-wait: 60000 #获取连接时最大等待时间,单位毫秒
# 检测相关
test-while-idle: true # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
test-on-borrow: false # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
test-on-return: false # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
time-between-eviction-runs-millis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
min-evictable-idle-time-millis: 300000 #连接保持空闲而不被驱逐的最小时间
validation-query: SELECT 1 FROM DUAL
# 是否缓存preparedStatement
pool-prepared-statements: false # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
max-pool-prepared-statement-per-connection-size: 20 # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计 通过connectProperties属性来打开mergeSql功能;慢SQL记录
filters: stat,wall
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
cache:
type: redis
redis: redis:
host: 127.0.0.1 host: 127.0.0.1
port: 6379 port: 6379
database: 2 #1库:运营平台 #2库:商户系统 #3库:支付网关
timeout: 1000
password: password:
# 注意:以下MQ配置需注意【如需使用activeMQ则需将rabbitMQ配置注释即可】 # 注意:以下MQ配置需注意【如需使用activeMQ则需将rabbitMQ配置注释即可】
profiles: profiles:
include: include:
- activeMQ - activeMQ
# - rabbitMQ # 需要安装延迟队列插件:https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq/ #- rabbitMQ # 需要安装延迟队列插件:https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq/
#- rocketMQ
#activeMQ配置 #activeMQ配置
activemq: activemq:
broker-url: tcp://localhost:61616 #连接地址 broker-url: tcp://localhost:61616 #连接地址
#rabbitmq配置 #rabbitmq配置
rabbitmq: # rabbitmq:
addresses: 127.0.0.1:5672 # addresses: 127.0.0.1:5672
username: guest # username: guest
password: guest # password: guest
dynamic: true # dynamic: true
virtual-host: / # virtual-host: /
#rocketmq配置
# rocketmq:
# name-server: 127.0.0.1:9876
# producer:
# group: rocket-group
#日志配置参数。 #日志配置参数。
# 当存在logback-spring.xml文件时: 该配置将引进到logback配置, springboot配置不生效。 # 当存在logback-spring.xml文件时: 该配置将引进到logback配置, springboot配置不生效。
...@@ -52,9 +97,26 @@ logging: ...@@ -52,9 +97,26 @@ logging:
#系统业务参数 #系统业务参数
isys: isys:
allow-cors: false #是否允许跨域请求 [生产环境建议关闭, 若api与前端项目没有在同一个域名下时,应开启此配置或在nginx统一配置允许跨域]
jwt-secret: ARNXp4MzjOOQqxtv #生成jwt的秘钥。 要求每个系统有单独的秘钥管理机制。 jwt-secret: ARNXp4MzjOOQqxtv #生成jwt的秘钥。 要求每个系统有单独的秘钥管理机制。
# 文件系统配置项(系统内oss, 并非云oss) #是否允许跨域请求 [生产环境建议关闭, 若api与前端项目没有在同一个域名下时,应开启此配置或在nginx统一配置允许跨域]
oss-file: allow-cors: true
root-path: /home/jeepay/upload #存储根路径 ( 无需以‘/’结尾 )
\ No newline at end of file oss:
file-root-path: /home/jeepay/upload #存储根路径 ( 无需以‘/’结尾 )
file-public-path: ${isys.oss.file-root-path}/public #公共读取块 ( 一般配合root-path参数进行设置,需以‘/’ 开头, 无需以‘/’结尾 )
file-private-path: ${isys.oss.file-root-path}/private #私有化本地访问,不允许url方式公共读取 ( 一般配合root-path参数进行设置,需以‘/’ 开头, 无需以‘/’结尾 )
# [local]: 本地存储,所有的文件将存在放本地,可通过nfs, rsync工具实现多机共享;
# [aliyun-oss]: 将文件统一上传到阿里云oss服务器; 注意:需调整jeepay-oss/pom.xml中的aliyun-sdk-oss组件依赖方式
service-type: local
# 阿里云OSS服务配置信息
aliyun-oss:
endpoint: oss-cn-beijing.aliyuncs.com #endpoint 如: oss-cn-beijing.aliyuncs.com
public-bucket-name: bucket1 #公共读 桶名称
private-bucket-name: bucket2 #私有 桶名称
access-key-id: KEY_KEY_KEY #AccessKeyId
access-key-secret: SECRET_SECRET_SECRET #AccessKeySecret
...@@ -9,37 +9,82 @@ ...@@ -9,37 +9,82 @@
# 该yml文件只配置与环境相关的参数, 其他配置读取项目下的配置项 # 该yml文件只配置与环境相关的参数, 其他配置读取项目下的配置项
# #
################################# #################################
server: server:
port: 9216 #设置端口为 9216 port: 9216 #设置端口
servlet:
context-path: / #设置应用的目录. 前缀需要带/, 无需设置后缀, 示例 【 /xxx 】 or 【 / 】
spring: spring:
servlet:
multipart:
enabled: true #是否启用http上传处理
max-request-size: 10MB #最大请求文件的大小
max-file-size: 10MB #设置单个文件最大长度
resources:
static-locations: classpath:/static #项目静态资源路径 (可直接通过http访问)
freemarker:
template-loader-path: classpath:/templates #freemarker模板目录
template-encoding: UTF-8
suffix: .ftl
settings:
classic_compatible: true # 如果变量为null,转化为空字符串,比如做比较的时候按照空字符做比较
number_format: '#' #数字格式进行原样显示,不加格式化字符例如 100,00
datasource: datasource:
# yml填写url连接串, 无需将&符号进行转义 # yml填写url连接串, 无需将&符号进行转义
url: jdbc:mysql://127.0.0.1:3306/jeepaydb?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false url: jdbc:mysql://127.0.0.1:3306/jeepaydb?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
username: root username: root
password: password:
druid:
# 连接池配置项
initial-size: 5 #初始化时建立物理连接的个数
min-idle: 5 #最小连接池数量
max-active: 30 #最大连接池数量
max-wait: 60000 #获取连接时最大等待时间,单位毫秒
# 检测相关
test-while-idle: true # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
test-on-borrow: false # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
test-on-return: false # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
time-between-eviction-runs-millis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
min-evictable-idle-time-millis: 300000 #连接保持空闲而不被驱逐的最小时间
validation-query: SELECT 1 FROM DUAL
# 是否缓存preparedStatement
pool-prepared-statements: false # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
max-pool-prepared-statement-per-connection-size: 20 # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计 通过connectProperties属性来打开mergeSql功能;慢SQL记录
filters: stat,wall
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
cache:
type: redis
redis: redis:
host: 127.0.0.1 host: 127.0.0.1
port: 6379 port: 6379
database: 3 #1库:运营平台 #2库:商户系统 #3库:支付网关
timeout: 1000
password: password:
# 注意:以下MQ配置需注意【如需使用activeMQ则需将rabbitMQ配置注释即可】 # 注意:以下MQ配置需注意【如需使用activeMQ则需将rabbitMQ配置注释即可】
profiles: profiles:
include: include:
- activeMQ - activeMQ
# - rabbitMQ # 需要安装延迟队列插件:https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq/ #- rabbitMQ # 需要安装延迟队列插件:https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq/
#- rocketMQ
#activeMQ配置 #activeMQ配置
activemq: activemq:
broker-url: tcp://localhost:61616 #连接地址 broker-url: tcp://localhost:61616 #连接地址
#rabbitmq配置 #rabbitmq配置
rabbitmq: # rabbitmq:
addresses: 127.0.0.1:5672 # addresses: 127.0.0.1:5672
username: guest # username: guest
password: guest # password: guest
dynamic: true # dynamic: true
virtual-host: / # virtual-host: /
#rocketmq配置
# rocketmq:
# name-server: 127.0.0.1:9876
# producer:
# group: rocket-group
#日志配置参数。 #日志配置参数。
# 当存在logback-spring.xml文件时: 该配置将引进到logback配置, springboot配置不生效。 # 当存在logback-spring.xml文件时: 该配置将引进到logback配置, springboot配置不生效。
...@@ -52,8 +97,24 @@ logging: ...@@ -52,8 +97,24 @@ logging:
#系统业务参数 #系统业务参数
isys: isys:
allow-cors: false #是否允许跨域请求 [生产环境建议关闭, 若api与前端项目没有在同一个域名下时,应开启此配置或在nginx统一配置允许跨域]
# 文件系统配置项(系统内oss, 并非云oss) #是否允许跨域请求 [生产环境建议关闭, 若api与前端项目没有在同一个域名下时,应开启此配置或在nginx统一配置允许跨域]
oss-file: allow-cors: true
root-path: /home/jeepay/upload #存储根路径 ( 无需以‘/’结尾 )
\ No newline at end of file oss:
file-root-path: /home/jeepay/upload #存储根路径 ( 无需以‘/’结尾 )
file-public-path: ${isys.oss.file-root-path}/public #公共读取块 ( 一般配合root-path参数进行设置,需以‘/’ 开头, 无需以‘/’结尾 )
file-private-path: ${isys.oss.file-root-path}/private #私有化本地访问,不允许url方式公共读取 ( 一般配合root-path参数进行设置,需以‘/’ 开头, 无需以‘/’结尾 )
# [local]: 本地存储,所有的文件将存在放本地,可通过nfs, rsync工具实现多机共享;
# [aliyun-oss]: 将文件统一上传到阿里云oss服务器; 注意:需调整jeepay-oss/pom.xml中的aliyun-sdk-oss组件依赖方式
service-type: local
# 阿里云OSS服务配置信息
aliyun-oss:
endpoint: oss-cn-beijing.aliyuncs.com #endpoint 如: oss-cn-beijing.aliyuncs.com
public-bucket-name: bucket1 #公共读 桶名称
private-bucket-name: bucket2 #私有 桶名称
access-key-id: KEY_KEY_KEY #AccessKeyId
access-key-secret: SECRET_SECRET_SECRET #AccessKeySecret
...@@ -188,6 +188,7 @@ CREATE TABLE `t_pay_interface_define` ( ...@@ -188,6 +188,7 @@ CREATE TABLE `t_pay_interface_define` (
`if_name` VARCHAR(20) NOT NULL COMMENT '接口名称', `if_name` VARCHAR(20) NOT NULL COMMENT '接口名称',
`is_mch_mode` TINYINT(6) NOT NULL DEFAULT 1 COMMENT '是否支持普通商户模式: 0-不支持, 1-支持', `is_mch_mode` TINYINT(6) NOT NULL DEFAULT 1 COMMENT '是否支持普通商户模式: 0-不支持, 1-支持',
`is_isv_mode` TINYINT(6) NOT NULL DEFAULT 1 COMMENT '是否支持服务商子商户模式: 0-不支持, 1-支持', `is_isv_mode` TINYINT(6) NOT NULL DEFAULT 1 COMMENT '是否支持服务商子商户模式: 0-不支持, 1-支持',
`config_page_type` TINYINT(6) NOT NULL DEFAULT 1 COMMENT '支付参数配置页面类型:1-JSON渲染,2-自定义',
`isv_params` VARCHAR(4096) DEFAULT NULL COMMENT 'ISV接口配置定义描述,json字符串', `isv_params` VARCHAR(4096) DEFAULT NULL COMMENT 'ISV接口配置定义描述,json字符串',
`isvsub_mch_params` VARCHAR(4096) DEFAULT NULL COMMENT '特约商户接口配置定义描述,json字符串', `isvsub_mch_params` VARCHAR(4096) DEFAULT NULL COMMENT '特约商户接口配置定义描述,json字符串',
`normal_mch_params` VARCHAR(4096) DEFAULT NULL COMMENT '普通商户接口配置定义描述,json字符串', `normal_mch_params` VARCHAR(4096) DEFAULT NULL COMMENT '普通商户接口配置定义描述,json字符串',
...@@ -574,25 +575,25 @@ INSERT INTO t_pay_way (way_code, way_name) VALUES ('YSF_BAR', '云闪付条码') ...@@ -574,25 +575,25 @@ INSERT INTO t_pay_way (way_code, way_name) VALUES ('YSF_BAR', '云闪付条码')
INSERT INTO t_pay_way (way_code, way_name) VALUES ('YSF_JSAPI', '云闪付jsapi'); INSERT INTO t_pay_way (way_code, way_name) VALUES ('YSF_JSAPI', '云闪付jsapi');
-- 初始化支付接口定义 -- 初始化支付接口定义
INSERT INTO t_pay_interface_define (if_code, if_name, is_mch_mode, is_isv_mode, isv_params, isvsub_mch_params, normal_mch_params, way_codes, icon, bg_color, state, remark) INSERT INTO t_pay_interface_define (if_code, if_name, is_mch_mode, is_isv_mode, config_page_type, isv_params, isvsub_mch_params, normal_mch_params, way_codes, icon, bg_color, state, remark)
VALUES ('alipay', '支付宝官方', 1, 1, VALUES ('alipay', '支付宝官方', 1, 1, 1,
'[{"name":"sandbox","desc":"环境配置","type":"radio","verify":"","values":"1,0","titles":"沙箱环境,生产环境","verify":"required"},{"name":"pid","desc":"合作伙伴身份(PID)","type":"text","verify":"required"},{"name":"appId","desc":"应用App ID","type":"text","verify":"required"},{"name":"privateKey", "desc":"应用私钥", "type": "textarea","verify":"required"},{"name":"alipayPublicKey", "desc":"支付宝公钥(不使用证书时必填)", "type": "textarea"},{"name":"signType","desc":"接口签名方式(推荐使用RSA2)","type":"radio","verify":"","values":"RSA,RSA2","titles":"RSA,RSA2","verify":"required"},{"name":"useCert","desc":"公钥证书","type":"radio","verify":"","values":"1,0","titles":"使用证书(请使用RSA2私钥),不使用证书"},{"name":"appPublicCert","desc":"应用公钥证书(.crt格式)","type":"file","verify":""},{"name":"alipayPublicCert","desc":"支付宝公钥证书(.crt格式)","type":"file","verify":""},{"name":"alipayRootCert","desc":"支付宝根证书(.crt格式)","type":"file","verify":""}]', '[{"name":"sandbox","desc":"环境配置","type":"radio","verify":"","values":"1,0","titles":"沙箱环境,生产环境","verify":"required"},{"name":"pid","desc":"合作伙伴身份(PID)","type":"text","verify":"required"},{"name":"appId","desc":"应用App ID","type":"text","verify":"required"},{"name":"privateKey", "desc":"应用私钥", "type": "textarea","verify":"required","star":"1"},{"name":"alipayPublicKey", "desc":"支付宝公钥(不使用证书时必填)", "type": "textarea","star":"1"},{"name":"signType","desc":"接口签名方式(推荐使用RSA2)","type":"radio","verify":"","values":"RSA,RSA2","titles":"RSA,RSA2","verify":"required"},{"name":"useCert","desc":"公钥证书","type":"radio","verify":"","values":"1,0","titles":"使用证书(请使用RSA2私钥),不使用证书"},{"name":"appPublicCert","desc":"应用公钥证书(.crt格式)","type":"file","verify":""},{"name":"alipayPublicCert","desc":"支付宝公钥证书(.crt格式)","type":"file","verify":""},{"name":"alipayRootCert","desc":"支付宝根证书(.crt格式)","type":"file","verify":""}]',
'[{"name":"appAuthToken", "desc":"子商户app_auth_token", "type": "text","readonly":"readonly"},{"name":"refreshToken", "desc":"子商户刷新token", "type": "hidden","readonly":"readonly"},{"name":"expireTimestamp", "desc":"authToken有效期(13位时间戳)", "type": "hidden","readonly":"readonly"}]', '[{"name":"appAuthToken", "desc":"子商户app_auth_token", "type": "text","readonly":"readonly"},{"name":"refreshToken", "desc":"子商户刷新token", "type": "hidden","readonly":"readonly"},{"name":"expireTimestamp", "desc":"authToken有效期(13位时间戳)", "type": "hidden","readonly":"readonly"}]',
'[{"name":"sandbox","desc":"环境配置","type":"radio","verify":"","values":"1,0","titles":"沙箱环境,生产环境","verify":"required"},{"name":"appId","desc":"应用App ID","type":"text","verify":"required"},{"name":"privateKey", "desc":"应用私钥", "type": "textarea","verify":"required"},{"name":"alipayPublicKey", "desc":"支付宝公钥(不使用证书时必填)", "type": "textarea"},{"name":"signType","desc":"接口签名方式(推荐使用RSA2)","type":"radio","verify":"","values":"RSA,RSA2","titles":"RSA,RSA2","verify":"required"},{"name":"useCert","desc":"公钥证书","type":"radio","verify":"","values":"1,0","titles":"使用证书(请使用RSA2私钥),不使用证书"},{"name":"appPublicCert","desc":"应用公钥证书(.crt格式)","type":"file","verify":""},{"name":"alipayPublicCert","desc":"支付宝公钥证书(.crt格式)","type":"file","verify":""},{"name":"alipayRootCert","desc":"支付宝根证书(.crt格式)","type":"file","verify":""}]', '[{"name":"sandbox","desc":"环境配置","type":"radio","verify":"","values":"1,0","titles":"沙箱环境,生产环境","verify":"required"},{"name":"appId","desc":"应用App ID","type":"text","verify":"required"},{"name":"privateKey", "desc":"应用私钥", "type": "textarea","verify":"required","star":"1"},{"name":"alipayPublicKey", "desc":"支付宝公钥(不使用证书时必填)", "type": "textarea","star":"1"},{"name":"signType","desc":"接口签名方式(推荐使用RSA2)","type":"radio","verify":"","values":"RSA,RSA2","titles":"RSA,RSA2","verify":"required"},{"name":"useCert","desc":"公钥证书","type":"radio","verify":"","values":"1,0","titles":"使用证书(请使用RSA2私钥),不使用证书"},{"name":"appPublicCert","desc":"应用公钥证书(.crt格式)","type":"file","verify":""},{"name":"alipayPublicCert","desc":"支付宝公钥证书(.crt格式)","type":"file","verify":""},{"name":"alipayRootCert","desc":"支付宝根证书(.crt格式)","type":"file","verify":""}]',
'[{"wayCode": "ALI_JSAPI"}, {"wayCode": "ALI_WAP"}, {"wayCode": "ALI_BAR"}, {"wayCode": "ALI_APP"}, {"wayCode": "ALI_PC"}, {"wayCode": "ALI_QR"}]', '[{"wayCode": "ALI_JSAPI"}, {"wayCode": "ALI_WAP"}, {"wayCode": "ALI_BAR"}, {"wayCode": "ALI_APP"}, {"wayCode": "ALI_PC"}, {"wayCode": "ALI_QR"}]',
'http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/alipay.png', '#1779FF', 1, '支付宝官方通道'); 'http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/alipay.png', '#1779FF', 1, '支付宝官方通道');
INSERT INTO t_pay_interface_define (if_code, if_name, is_mch_mode, is_isv_mode, isv_params, isvsub_mch_params, normal_mch_params, way_codes, icon, bg_color, state, remark) INSERT INTO t_pay_interface_define (if_code, if_name, is_mch_mode, is_isv_mode, config_page_type, isv_params, isvsub_mch_params, normal_mch_params, way_codes, icon, bg_color, state, remark)
VALUES ('wxpay', '微信支付官方', 1, 1, VALUES ('wxpay', '微信支付官方', 1, 1, 1,
'[{"name":"mchId", "desc":"微信支付商户号", "type": "text","verify":"required"},{"name":"appId","desc":"应用App ID","type":"text","verify":"required"},{"name":"appSecret","desc":"应用AppSecret","type":"text","verify":"required"},{"name":"oauth2Url", "desc":"oauth2地址(置空将使用官方)", "type": "text"},{"name":"key", "desc":"API密钥", "type": "textarea","verify":"required"},{"name":"apiVersion", "desc":"微信支付API版本", "type": "radio","values":"V2,V3","titles":"V2,V3","verify":"required"},{"name":"apiV3Key", "desc":"API V3秘钥(V3接口必填)", "type": "textarea","verify":""},{"name":"serialNo", "desc":"序列号(V3接口必填)", "type": "textarea","verify":""},{"name":"cert", "desc":"API证书(.p12格式)", "type": "file","verify":""},{"name":"apiClientKey", "desc":"私钥文件(.pem格式)", "type": "file","verify":""}]', '[{"name":"mchId", "desc":"微信支付商户号", "type": "text","verify":"required"},{"name":"appId","desc":"应用App ID","type":"text","verify":"required"},{"name":"appSecret","desc":"应用AppSecret","type":"text","verify":"required","star":"1"},{"name":"oauth2Url", "desc":"oauth2地址(置空将使用官方)", "type": "text"},{"name":"key", "desc":"API密钥", "type": "textarea","verify":"required","star":"1"},{"name":"apiVersion", "desc":"微信支付API版本", "type": "radio","values":"V2,V3","titles":"V2,V3","verify":"required"},{"name":"apiV3Key", "desc":"API V3秘钥(V3接口必填)", "type": "textarea","verify":"","star":"1"},{"name":"serialNo", "desc":"序列号(V3接口必填)", "type": "textarea","verify":"","star":"1"},{"name":"cert", "desc":"API证书(.p12格式)", "type": "file","verify":""},{"name":"apiClientKey", "desc":"私钥文件(.pem格式)", "type": "file","verify":""}]',
'[{"name":"subMchId","desc":"子商户ID","type":"text","verify":"required"},{"name":"subMchAppId","desc":"子账户appID(线上支付必填)","type":"text","verify":""}]', '[{"name":"subMchId","desc":"子商户ID","type":"text","verify":"required"},{"name":"subMchAppId","desc":"子账户appID(线上支付必填)","type":"text","verify":""}]',
'[{"name":"mchId", "desc":"微信支付商户号", "type": "text","verify":"required"},{"name":"appId","desc":"应用App ID","type":"text","verify":"required"},{"name":"appSecret","desc":"应用AppSecret","type":"text","verify":"required"},{"name":"oauth2Url", "desc":"oauth2地址(置空将使用官方)", "type": "text"},{"name":"key", "desc":"API密钥", "type": "textarea","verify":"required"},{"name":"apiVersion", "desc":"微信支付API版本", "type": "radio","values":"V2,V3","titles":"V2,V3","verify":"required"},{"name":"apiV3Key", "desc":"API V3秘钥(V3接口必填)", "type": "textarea","verify":""},{"name":"serialNo", "desc":"序列号(V3接口必填)", "type": "textarea","verify":""},{"name":"cert", "desc":"API证书(.p12格式)", "type": "file","verify":""},{"name":"apiClientKey", "desc":"私钥文件(.pem格式)", "type": "file","verify":""}]', '[{"name":"mchId", "desc":"微信支付商户号", "type": "text","verify":"required"},{"name":"appId","desc":"应用App ID","type":"text","verify":"required"},{"name":"appSecret","desc":"应用AppSecret","type":"text","verify":"required","star":"1"},{"name":"oauth2Url", "desc":"oauth2地址(置空将使用官方)", "type": "text"},{"name":"key", "desc":"API密钥", "type": "textarea","verify":"required","star":"1"},{"name":"apiVersion", "desc":"微信支付API版本", "type": "radio","values":"V2,V3","titles":"V2,V3","verify":"required"},{"name":"apiV3Key", "desc":"API V3秘钥(V3接口必填)", "type": "textarea","verify":"","star":"1"},{"name":"serialNo", "desc":"序列号(V3接口必填)", "type": "textarea","verify":"","star":"1" },{"name":"cert", "desc":"API证书(.p12格式)", "type": "file","verify":""},{"name":"apiClientKey", "desc":"私钥文件(.pem格式)", "type": "file","verify":""}]',
'[{"wayCode": "WX_APP"}, {"wayCode": "WX_H5"}, {"wayCode": "WX_NATIVE"}, {"wayCode": "WX_JSAPI"}, {"wayCode": "WX_BAR"}, {"wayCode": "WX_LITE"}]', '[{"wayCode": "WX_APP"}, {"wayCode": "WX_H5"}, {"wayCode": "WX_NATIVE"}, {"wayCode": "WX_JSAPI"}, {"wayCode": "WX_BAR"}, {"wayCode": "WX_LITE"}]',
'http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/wxpay.png', '#04BE02', 1, '微信官方通道'); 'http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/wxpay.png', '#04BE02', 1, '微信官方通道');
INSERT INTO t_pay_interface_define (if_code, if_name, is_mch_mode, is_isv_mode, isv_params, isvsub_mch_params, normal_mch_params, way_codes, icon, bg_color, state, remark) INSERT INTO t_pay_interface_define (if_code, if_name, is_mch_mode, is_isv_mode, config_page_type, isv_params, isvsub_mch_params, normal_mch_params, way_codes, icon, bg_color, state, remark)
VALUES ('ysfpay', '云闪付官方', 0, 1, VALUES ('ysfpay', '云闪付官方', 0, 1, 1,
'[{"name":"sandbox","desc":"环境配置","type":"radio","verify":"","values":"1,0","titles":"沙箱环境,生产环境","verify":"required"},{"name":"serProvId","desc":"服务商开发ID[serProvId]","type":"text","verify":"required"},{"name":"isvPrivateCertFile","desc":"服务商私钥文件(.pfx格式)","type":"file","verify":"required"},{"name":"isvPrivateCertPwd","desc":"服务商私钥文件密码","type":"text","verify":"required"},{"name":"ysfpayPublicKey","desc":"云闪付开发公钥(证书管理页面可查询)","type":"textarea","verify":"required"},{"name":"acqOrgCode","desc":"可用支付机构编号","type":"text","verify":"required"}]', '[{"name":"sandbox","desc":"环境配置","type":"radio","verify":"","values":"1,0","titles":"沙箱环境,生产环境","verify":"required"},{"name":"serProvId","desc":"服务商开发ID[serProvId]","type":"text","verify":"required"},{"name":"isvPrivateCertFile","desc":"服务商私钥文件(.pfx格式)","type":"file","verify":"required"},{"name":"isvPrivateCertPwd","desc":"服务商私钥文件密码","type":"text","verify":"required","star":"1"},{"name":"ysfpayPublicKey","desc":"云闪付开发公钥(证书管理页面可查询)","type":"textarea","verify":"required","star":"1"},{"name":"acqOrgCode","desc":"可用支付机构编号","type":"text","verify":"required"}]',
'[{"name":"merId","desc":"商户编号","type":"text","verify":"required"}]', '[{"name":"merId","desc":"商户编号","type":"text","verify":"required"}]',
NULL, NULL,
'[{"wayCode": "YSF_BAR"}, {"wayCode": "ALI_JSAPI"}, {"wayCode": "WX_JSAPI"}, {"wayCode": "ALI_BAR"}, {"wayCode": "WX_BAR"}]', '[{"wayCode": "YSF_BAR"}, {"wayCode": "ALI_JSAPI"}, {"wayCode": "WX_JSAPI"}, {"wayCode": "ALI_BAR"}, {"wayCode": "WX_BAR"}]',
......
...@@ -10,5 +10,35 @@ ALTER TABLE `t_mch_notify_record` ADD COLUMN `notify_count_limit` INT(11) NOT NU ...@@ -10,5 +10,35 @@ ALTER TABLE `t_mch_notify_record` ADD COLUMN `notify_count_limit` INT(11) NOT NU
## -- ++++ ++++ ## -- ++++ ++++
-- 支付接口定义表 新增支付参数配置页面是否为自定义
ALTER TABLE `t_pay_interface_define` ADD COLUMN `config_page_type` TINYINT(6) NOT NULL DEFAULT 1 COMMENT '支付参数配置页面类型:1-JSON渲染,2-自定义' after `is_isv_mode`;
-- 优化支付接口定义初始化,新增是否为脱敏数据
DELETE FROM t_pay_interface_define WHERE if_code = 'alipay';
INSERT INTO t_pay_interface_define (if_code, if_name, is_mch_mode, is_isv_mode, config_page_type, isv_params, isvsub_mch_params, normal_mch_params, way_codes, icon, bg_color, state, remark)
VALUES ('alipay', '支付宝官方', 1, 1, 1,
'[{"name":"sandbox","desc":"环境配置","type":"radio","verify":"","values":"1,0","titles":"沙箱环境,生产环境","verify":"required"},{"name":"pid","desc":"合作伙伴身份(PID)","type":"text","verify":"required"},{"name":"appId","desc":"应用App ID","type":"text","verify":"required"},{"name":"privateKey", "desc":"应用私钥", "type": "textarea","verify":"required","star":"1"},{"name":"alipayPublicKey", "desc":"支付宝公钥(不使用证书时必填)", "type": "textarea","star":"1"},{"name":"signType","desc":"接口签名方式(推荐使用RSA2)","type":"radio","verify":"","values":"RSA,RSA2","titles":"RSA,RSA2","verify":"required"},{"name":"useCert","desc":"公钥证书","type":"radio","verify":"","values":"1,0","titles":"使用证书(请使用RSA2私钥),不使用证书"},{"name":"appPublicCert","desc":"应用公钥证书(.crt格式)","type":"file","verify":""},{"name":"alipayPublicCert","desc":"支付宝公钥证书(.crt格式)","type":"file","verify":""},{"name":"alipayRootCert","desc":"支付宝根证书(.crt格式)","type":"file","verify":""}]',
'[{"name":"appAuthToken", "desc":"子商户app_auth_token", "type": "text","readonly":"readonly"},{"name":"refreshToken", "desc":"子商户刷新token", "type": "hidden","readonly":"readonly"},{"name":"expireTimestamp", "desc":"authToken有效期(13位时间戳)", "type": "hidden","readonly":"readonly"}]',
'[{"name":"sandbox","desc":"环境配置","type":"radio","verify":"","values":"1,0","titles":"沙箱环境,生产环境","verify":"required"},{"name":"appId","desc":"应用App ID","type":"text","verify":"required"},{"name":"privateKey", "desc":"应用私钥", "type": "textarea","verify":"required","star":"1"},{"name":"alipayPublicKey", "desc":"支付宝公钥(不使用证书时必填)", "type": "textarea","star":"1"},{"name":"signType","desc":"接口签名方式(推荐使用RSA2)","type":"radio","verify":"","values":"RSA,RSA2","titles":"RSA,RSA2","verify":"required"},{"name":"useCert","desc":"公钥证书","type":"radio","verify":"","values":"1,0","titles":"使用证书(请使用RSA2私钥),不使用证书"},{"name":"appPublicCert","desc":"应用公钥证书(.crt格式)","type":"file","verify":""},{"name":"alipayPublicCert","desc":"支付宝公钥证书(.crt格式)","type":"file","verify":""},{"name":"alipayRootCert","desc":"支付宝根证书(.crt格式)","type":"file","verify":""}]',
'[{"wayCode": "ALI_JSAPI"}, {"wayCode": "ALI_WAP"}, {"wayCode": "ALI_BAR"}, {"wayCode": "ALI_APP"}, {"wayCode": "ALI_PC"}, {"wayCode": "ALI_QR"}]',
'http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/alipay.png', '#1779FF', 1, '支付宝官方通道');
DELETE FROM t_pay_interface_define WHERE if_code = 'wxpay';
INSERT INTO t_pay_interface_define (if_code, if_name, is_mch_mode, is_isv_mode, config_page_type, isv_params, isvsub_mch_params, normal_mch_params, way_codes, icon, bg_color, state, remark)
VALUES ('wxpay', '微信支付官方', 1, 1, 1,
'[{"name":"mchId", "desc":"微信支付商户号", "type": "text","verify":"required"},{"name":"appId","desc":"应用App ID","type":"text","verify":"required"},{"name":"appSecret","desc":"应用AppSecret","type":"text","verify":"required","star":"1"},{"name":"oauth2Url", "desc":"oauth2地址(置空将使用官方)", "type": "text"},{"name":"key", "desc":"API密钥", "type": "textarea","verify":"required","star":"1"},{"name":"apiVersion", "desc":"微信支付API版本", "type": "radio","values":"V2,V3","titles":"V2,V3","verify":"required"},{"name":"apiV3Key", "desc":"API V3秘钥(V3接口必填)", "type": "textarea","verify":"","star":"1"},{"name":"serialNo", "desc":"序列号(V3接口必填)", "type": "textarea","verify":"","star":"1"},{"name":"cert", "desc":"API证书(.p12格式)", "type": "file","verify":""},{"name":"apiClientKey", "desc":"私钥文件(.pem格式)", "type": "file","verify":""}]',
'[{"name":"subMchId","desc":"子商户ID","type":"text","verify":"required"},{"name":"subMchAppId","desc":"子账户appID(线上支付必填)","type":"text","verify":""}]',
'[{"name":"mchId", "desc":"微信支付商户号", "type": "text","verify":"required"},{"name":"appId","desc":"应用App ID","type":"text","verify":"required"},{"name":"appSecret","desc":"应用AppSecret","type":"text","verify":"required","star":"1"},{"name":"oauth2Url", "desc":"oauth2地址(置空将使用官方)", "type": "text"},{"name":"key", "desc":"API密钥", "type": "textarea","verify":"required","star":"1"},{"name":"apiVersion", "desc":"微信支付API版本", "type": "radio","values":"V2,V3","titles":"V2,V3","verify":"required"},{"name":"apiV3Key", "desc":"API V3秘钥(V3接口必填)", "type": "textarea","verify":"","star":"1"},{"name":"serialNo", "desc":"序列号(V3接口必填)", "type": "textarea","verify":"","star":"1" },{"name":"cert", "desc":"API证书(.p12格式)", "type": "file","verify":""},{"name":"apiClientKey", "desc":"私钥文件(.pem格式)", "type": "file","verify":""}]',
'[{"wayCode": "WX_APP"}, {"wayCode": "WX_H5"}, {"wayCode": "WX_NATIVE"}, {"wayCode": "WX_JSAPI"}, {"wayCode": "WX_BAR"}, {"wayCode": "WX_LITE"}]',
'http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/wxpay.png', '#04BE02', 1, '微信官方通道');
DELETE FROM t_pay_interface_define WHERE if_code = 'ysfpay';
INSERT INTO t_pay_interface_define (if_code, if_name, is_mch_mode, is_isv_mode, config_page_type, isv_params, isvsub_mch_params, normal_mch_params, way_codes, icon, bg_color, state, remark)
VALUES ('ysfpay', '云闪付官方', 0, 1, 1,
'[{"name":"sandbox","desc":"环境配置","type":"radio","verify":"","values":"1,0","titles":"沙箱环境,生产环境","verify":"required"},{"name":"serProvId","desc":"服务商开发ID[serProvId]","type":"text","verify":"required"},{"name":"isvPrivateCertFile","desc":"服务商私钥文件(.pfx格式)","type":"file","verify":"required"},{"name":"isvPrivateCertPwd","desc":"服务商私钥文件密码","type":"text","verify":"required","star":"1"},{"name":"ysfpayPublicKey","desc":"云闪付开发公钥(证书管理页面可查询)","type":"textarea","verify":"required","star":"1"},{"name":"acqOrgCode","desc":"可用支付机构编号","type":"text","verify":"required"}]',
'[{"name":"merId","desc":"商户编号","type":"text","verify":"required"}]',
NULL,
'[{"wayCode": "YSF_BAR"}, {"wayCode": "ALI_JSAPI"}, {"wayCode": "WX_JSAPI"}, {"wayCode": "ALI_BAR"}, {"wayCode": "WX_BAR"}]',
'http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/ysfpay.png', 'red', 1, '云闪付官方通道');
...@@ -70,6 +70,11 @@ public class PayInterfaceDefine extends BaseModel implements Serializable { ...@@ -70,6 +70,11 @@ public class PayInterfaceDefine extends BaseModel implements Serializable {
*/ */
private Byte isIsvMode; private Byte isIsvMode;
/**
* 支付参数配置页面类型:1-JSON渲染,2-自定义
*/
private Byte configPageType;
/** /**
* ISV接口配置定义描述,json字符串 * ISV接口配置定义描述,json字符串
*/ */
......
...@@ -64,4 +64,9 @@ public class DBApplicationConfig implements Serializable { ...@@ -64,4 +64,9 @@ public class DBApplicationConfig implements Serializable {
return getPaySiteUrl() + "/api/scan/imgs/" + JeepayKit.aesEncode(url) + ".png"; return getPaySiteUrl() + "/api/scan/imgs/" + JeepayKit.aesEncode(url) + ".png";
} }
/** 生成 【支付宝 isv子商户的授权链接地址】 **/
public String genAlipayIsvsubMchAuthUrl(String isvNo, String mchAppId){
return getPaySiteUrl() + "/api/channelbiz/alipay/redirectAppToAppAuth/" + isvNo + "_" + mchAppId;
}
} }
...@@ -21,12 +21,13 @@ import com.jeequan.jeepay.core.model.params.alipay.AlipayIsvParams; ...@@ -21,12 +21,13 @@ import com.jeequan.jeepay.core.model.params.alipay.AlipayIsvParams;
import com.jeequan.jeepay.core.model.params.wxpay.WxpayIsvParams; import com.jeequan.jeepay.core.model.params.wxpay.WxpayIsvParams;
import com.jeequan.jeepay.core.model.params.ysf.YsfpayIsvParams; import com.jeequan.jeepay.core.model.params.ysf.YsfpayIsvParams;
/* /**
* 抽象类 isv参数定义 * 抽象类 isv参数定义
* *
* @author terrfly * @author terrfly
* @site https://www.jeepay.vip * @site https://www.jeepay.vip
* @date 2021/6/8 16:33 * @date 2021/6/8 16:33
* @modify ZhuXiao
*/ */
public abstract class IsvParams { public abstract class IsvParams {
...@@ -42,4 +43,9 @@ public abstract class IsvParams { ...@@ -42,4 +43,9 @@ public abstract class IsvParams {
return null; return null;
} }
/**
* 敏感数据脱敏
*/
public abstract String deSenData();
} }
...@@ -39,4 +39,9 @@ public abstract class NormalMchParams { ...@@ -39,4 +39,9 @@ public abstract class NormalMchParams {
return null; return null;
} }
/**
* 敏感数据脱敏
*/
public abstract String deSenData();
} }
...@@ -38,6 +38,11 @@ public class AlipayConfig{ ...@@ -38,6 +38,11 @@ public class AlipayConfig{
public static String PROD_OAUTH_URL = "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=%s&scope=auth_base&state=&redirect_uri=%s"; public static String PROD_OAUTH_URL = "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=%s&scope=auth_base&state=&redirect_uri=%s";
public static String SANDBOX_OAUTH_URL = "https://openauth.alipaydev.com/oauth2/publicAppAuthorize.htm?app_id=%s&scope=auth_base&state=&redirect_uri=%s"; public static String SANDBOX_OAUTH_URL = "https://openauth.alipaydev.com/oauth2/publicAppAuthorize.htm?app_id=%s&scope=auth_base&state=&redirect_uri=%s";
/** isv获取授权商户URL地址 **/
public static String PROD_APP_TO_APP_AUTH_URL = "https://openauth.alipay.com/oauth2/appToAppAuth.htm?app_id=%s&redirect_uri=%s&state=%s";
public static String SANDBOX_APP_TO_APP_AUTH_URL = "https://openauth.alipaydev.com/oauth2/appToAppAuth.htm?app_id=%s&redirect_uri=%s&state=%s";
public static String FORMAT = "json"; public static String FORMAT = "json";
public static String CHARSET = "UTF-8"; public static String CHARSET = "UTF-8";
......
...@@ -15,8 +15,12 @@ ...@@ -15,8 +15,12 @@
*/ */
package com.jeequan.jeepay.core.model.params.alipay; package com.jeequan.jeepay.core.model.params.alipay;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jeequan.jeepay.core.model.params.IsvParams; import com.jeequan.jeepay.core.model.params.IsvParams;
import com.jeequan.jeepay.core.utils.StringKit;
import lombok.Data; import lombok.Data;
import org.apache.commons.lang3.StringUtils;
/* /*
* 支付宝 isv参数定义 * 支付宝 isv参数定义
...@@ -58,4 +62,17 @@ public class AlipayIsvParams extends IsvParams { ...@@ -58,4 +62,17 @@ public class AlipayIsvParams extends IsvParams {
/** 支付宝根证书 **/ /** 支付宝根证书 **/
private String alipayRootCert; private String alipayRootCert;
@Override
public String deSenData() {
AlipayIsvParams isvParams = this;
if (StringUtils.isNotBlank(this.privateKey)) {
isvParams.setPrivateKey(StringKit.str2Star(this.privateKey, 4, 4, 6));
}
if (StringUtils.isNotBlank(this.alipayPublicKey)) {
isvParams.setAlipayPublicKey(StringKit.str2Star(this.alipayPublicKey, 6, 6, 6));
}
return ((JSONObject) JSON.toJSON(isvParams)).toJSONString();
}
} }
...@@ -15,8 +15,12 @@ ...@@ -15,8 +15,12 @@
*/ */
package com.jeequan.jeepay.core.model.params.alipay; package com.jeequan.jeepay.core.model.params.alipay;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jeequan.jeepay.core.model.params.NormalMchParams; import com.jeequan.jeepay.core.model.params.NormalMchParams;
import com.jeequan.jeepay.core.utils.StringKit;
import lombok.Data; import lombok.Data;
import org.apache.commons.lang3.StringUtils;
/* /*
* 支付宝 普通商户参数定义 * 支付宝 普通商户参数定义
...@@ -55,5 +59,17 @@ public class AlipayNormalMchParams extends NormalMchParams { ...@@ -55,5 +59,17 @@ public class AlipayNormalMchParams extends NormalMchParams {
/** 支付宝根证书 **/ /** 支付宝根证书 **/
private String alipayRootCert; private String alipayRootCert;
@Override
public String deSenData() {
AlipayNormalMchParams mchParams = this;
if (StringUtils.isNotBlank(this.privateKey)) {
mchParams.setPrivateKey(StringKit.str2Star(this.privateKey, 4, 4, 6));
}
if (StringUtils.isNotBlank(this.alipayPublicKey)) {
mchParams.setAlipayPublicKey(StringKit.str2Star(this.alipayPublicKey, 6, 6, 6));
}
return ((JSONObject) JSON.toJSON(mchParams)).toJSONString();
}
} }
...@@ -15,8 +15,12 @@ ...@@ -15,8 +15,12 @@
*/ */
package com.jeequan.jeepay.core.model.params.wxpay; package com.jeequan.jeepay.core.model.params.wxpay;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jeequan.jeepay.core.model.params.IsvParams; import com.jeequan.jeepay.core.model.params.IsvParams;
import com.jeequan.jeepay.core.utils.StringKit;
import lombok.Data; import lombok.Data;
import org.apache.commons.lang3.StringUtils;
/* /*
* 微信官方支付 配置参数 * 微信官方支付 配置参数
...@@ -61,4 +65,23 @@ public class WxpayIsvParams extends IsvParams { ...@@ -61,4 +65,23 @@ public class WxpayIsvParams extends IsvParams {
/** 私钥文件(.pem格式) **/ /** 私钥文件(.pem格式) **/
private String apiClientKey; private String apiClientKey;
@Override
public String deSenData() {
WxpayIsvParams isvParams = this;
if (StringUtils.isNotBlank(this.appSecret)) {
isvParams.setAppSecret(StringKit.str2Star(this.appSecret, 4, 4, 6));
}
if (StringUtils.isNotBlank(this.key)) {
isvParams.setKey(StringKit.str2Star(this.key, 4, 4, 6));
}
if (StringUtils.isNotBlank(this.apiV3Key)) {
isvParams.setApiV3Key(StringKit.str2Star(this.apiV3Key, 4, 4, 6));
}
if (StringUtils.isNotBlank(this.serialNo)) {
isvParams.setSerialNo(StringKit.str2Star(this.serialNo, 4, 4, 6));
}
return ((JSONObject)JSON.toJSON(isvParams)).toJSONString();
}
} }
...@@ -15,8 +15,12 @@ ...@@ -15,8 +15,12 @@
*/ */
package com.jeequan.jeepay.core.model.params.wxpay; package com.jeequan.jeepay.core.model.params.wxpay;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jeequan.jeepay.core.model.params.NormalMchParams; import com.jeequan.jeepay.core.model.params.NormalMchParams;
import com.jeequan.jeepay.core.utils.StringKit;
import lombok.Data; import lombok.Data;
import org.apache.commons.lang3.StringUtils;
/* /*
* 微信官方支付 配置参数 * 微信官方支付 配置参数
...@@ -28,34 +32,72 @@ import lombok.Data; ...@@ -28,34 +32,72 @@ import lombok.Data;
@Data @Data
public class WxpayNormalMchParams extends NormalMchParams { public class WxpayNormalMchParams extends NormalMchParams {
/** 应用App ID */ /**
* 应用App ID
*/
private String appId; private String appId;
/** 应用AppSecret */ /**
* 应用AppSecret
*/
private String appSecret; private String appSecret;
/** 微信支付商户号 */ /**
* 微信支付商户号
*/
private String mchId; private String mchId;
/** oauth2地址 */ /**
* oauth2地址
*/
private String oauth2Url; private String oauth2Url;
/** API密钥 */ /**
* API密钥
*/
private String key; private String key;
/** 微信支付API版本 **/ /**
* 微信支付API版本
**/
private String apiVersion; private String apiVersion;
/** API V3秘钥 **/ /**
* API V3秘钥
**/
private String apiV3Key; private String apiV3Key;
/** 序列号 **/ /**
* 序列号
**/
private String serialNo; private String serialNo;
/** API证书(.p12格式)**/ /**
* API证书(.p12格式)
**/
private String cert; private String cert;
/** 私钥文件(.pem格式) **/ /**
* 私钥文件(.pem格式)
**/
private String apiClientKey; private String apiClientKey;
@Override
public String deSenData() {
WxpayNormalMchParams mchParams = this;
if (StringUtils.isNotBlank(this.appSecret)) {
mchParams.setAppSecret(StringKit.str2Star(this.appSecret, 4, 4, 6));
}
if (StringUtils.isNotBlank(this.key)) {
mchParams.setKey(StringKit.str2Star(this.key, 4, 4, 6));
}
if (StringUtils.isNotBlank(this.apiV3Key)) {
mchParams.setApiV3Key(StringKit.str2Star(this.apiV3Key, 4, 4, 6));
}
if (StringUtils.isNotBlank(this.serialNo)) {
mchParams.setSerialNo(StringKit.str2Star(this.serialNo, 4, 4, 6));
}
return ((JSONObject) JSON.toJSON(mchParams)).toJSONString();
}
} }
...@@ -15,8 +15,12 @@ ...@@ -15,8 +15,12 @@
*/ */
package com.jeequan.jeepay.core.model.params.ysf; package com.jeequan.jeepay.core.model.params.ysf;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jeequan.jeepay.core.model.params.IsvParams; import com.jeequan.jeepay.core.model.params.IsvParams;
import com.jeequan.jeepay.core.utils.StringKit;
import lombok.Data; import lombok.Data;
import org.apache.commons.lang3.StringUtils;
/* /*
* 云闪付 配置信息 * 云闪付 配置信息
...@@ -46,4 +50,17 @@ public class YsfpayIsvParams extends IsvParams { ...@@ -46,4 +50,17 @@ public class YsfpayIsvParams extends IsvParams {
/** acqOrgCodeList 支付机构号 **/ /** acqOrgCodeList 支付机构号 **/
private String acqOrgCode; private String acqOrgCode;
@Override
public String deSenData() {
YsfpayIsvParams isvParams = this;
if (StringUtils.isNotBlank(this.isvPrivateCertPwd)) {
isvParams.setIsvPrivateCertPwd(StringKit.str2Star(this.isvPrivateCertPwd, 0, 3, 6));
}
if (StringUtils.isNotBlank(this.ysfpayPublicKey)) {
isvParams.setYsfpayPublicKey(StringKit.str2Star(this.ysfpayPublicKey, 6, 6, 6));
}
return ((JSONObject) JSON.toJSON(isvParams)).toJSONString();
}
} }
...@@ -20,9 +20,7 @@ import com.jeequan.jeepay.core.constants.CS; ...@@ -20,9 +20,7 @@ import com.jeequan.jeepay.core.constants.CS;
import com.jeequan.jeepay.core.exception.BizException; import com.jeequan.jeepay.core.exception.BizException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import sun.misc.BASE64Decoder;
import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
...@@ -34,7 +32,7 @@ import java.util.regex.Pattern; ...@@ -34,7 +32,7 @@ import java.util.regex.Pattern;
/* /*
* jeepay工具类 * jeepay工具类
* *
* @author terrfly * @author terrfly
* @site https://www.jeepay.vip * @site https://www.jeepay.vip
* @date 2021/6/8 16:50 * @date 2021/6/8 16:50
...@@ -42,13 +40,7 @@ import java.util.regex.Pattern; ...@@ -42,13 +40,7 @@ import java.util.regex.Pattern;
@Slf4j @Slf4j
public class JeepayKit { public class JeepayKit {
public static byte[] AES_KEY = null; public static byte[] AES_KEY = "4ChT08phkz59hquD795X7w==".getBytes();
static{
try {
AES_KEY = new BASE64Decoder().decodeBuffer("4ChT08phkz59hquD795X7w==");
} catch (IOException e) {
}
}
/** 加密 **/ /** 加密 **/
public static String aesEncode(String str){ public static String aesEncode(String str){
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package com.jeequan.jeepay.core.utils; package com.jeequan.jeepay.core.utils;
import cn.hutool.core.net.url.UrlBuilder; import cn.hutool.core.net.url.UrlBuilder;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.util.Map; import java.util.Map;
...@@ -65,4 +66,83 @@ public class StringKit { ...@@ -65,4 +66,83 @@ public class StringKit {
return url.startsWith("http://") ||url.startsWith("https://"); return url.startsWith("http://") ||url.startsWith("https://");
} }
/**
* 对字符加星号处理:除前面几位和后面几位外,其他的字符以星号代替
*
* @param content 传入的字符串
* @param frontNum 保留前面字符的位数
* @param endNum 保留后面字符的位数
* @return 带星号的字符串
*/
public static String str2Star2(String content, int frontNum, int endNum) {
if (frontNum >= content.length() || frontNum < 0) {
return content;
}
if (endNum >= content.length() || endNum < 0) {
return content;
}
if (frontNum + endNum >= content.length()) {
return content;
}
String starStr = "";
for (int i = 0; i < (content.length() - frontNum - endNum); i++) {
starStr = starStr + "*";
}
return content.substring(0, frontNum) + starStr
+ content.substring(content.length() - endNum, content.length());
}
/**
* 对字符加星号处理:除前面几位和后面几位外,其他的字符以星号代替
*
* @param content 传入的字符串
* @param frontNum 保留前面字符的位数
* @param endNum 保留后面字符的位数
* @param starNum 指定star的数量
* @return 带星号的字符串
*/
public static String str2Star(String content, int frontNum, int endNum, int starNum) {
if (frontNum >= content.length() || frontNum < 0) {
return content;
}
if (endNum >= content.length() || endNum < 0) {
return content;
}
if (frontNum + endNum >= content.length()) {
return content;
}
String starStr = "";
for (int i = 0; i < starNum; i++) {
starStr = starStr + "*";
}
return content.substring(0, frontNum) + starStr
+ content.substring(content.length() - endNum, content.length());
}
/**
* 合并两个json字符串
* key相同,则后者覆盖前者的值
* key不同,则合并至前者
* @param originStr
* @param mergeStr
* @return 合并后的json字符串
*/
public static String marge(String originStr, String mergeStr) {
if (StringUtils.isAnyBlank(originStr, mergeStr)) {
return null;
}
JSONObject originJSON = JSONObject.parseObject(originStr);
JSONObject mergeJSON = JSONObject.parseObject(mergeStr);
if (originJSON == null || mergeJSON == null) {
return null;
}
originJSON.putAll(mergeJSON);
return originJSON.toJSONString();
}
} }
...@@ -15,21 +15,26 @@ ...@@ -15,21 +15,26 @@
*/ */
package com.jeequan.jeepay.mgr.ctrl.isv; package com.jeequan.jeepay.mgr.ctrl.isv;
import com.alibaba.fastjson.JSONObject;
import com.jeequan.jeepay.core.aop.MethodLog; import com.jeequan.jeepay.core.aop.MethodLog;
import com.jeequan.jeepay.core.constants.ApiCodeEnum; import com.jeequan.jeepay.core.constants.ApiCodeEnum;
import com.jeequan.jeepay.core.constants.CS; import com.jeequan.jeepay.core.constants.CS;
import com.jeequan.jeepay.core.entity.PayInterfaceConfig; import com.jeequan.jeepay.core.entity.PayInterfaceConfig;
import com.jeequan.jeepay.core.entity.PayInterfaceDefine; import com.jeequan.jeepay.core.entity.PayInterfaceDefine;
import com.jeequan.jeepay.core.model.ApiRes; import com.jeequan.jeepay.core.model.ApiRes;
import com.jeequan.jeepay.core.model.params.IsvParams;
import com.jeequan.jeepay.core.mq.MqCommonService; import com.jeequan.jeepay.core.mq.MqCommonService;
import com.jeequan.jeepay.core.utils.StringKit;
import com.jeequan.jeepay.mgr.ctrl.CommonCtrl; import com.jeequan.jeepay.mgr.ctrl.CommonCtrl;
import com.jeequan.jeepay.service.impl.PayInterfaceConfigService; import com.jeequan.jeepay.service.impl.PayInterfaceConfigService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 服务商支付接口管理类 * 服务商支付接口管理类
...@@ -67,8 +72,16 @@ public class IsvPayInterfaceConfigController extends CommonCtrl { ...@@ -67,8 +72,16 @@ public class IsvPayInterfaceConfigController extends CommonCtrl {
@GetMapping("/{isvNo}/{ifCode}") @GetMapping("/{isvNo}/{ifCode}")
public ApiRes getByMchNo(@PathVariable(value = "isvNo") String isvNo, @PathVariable(value = "ifCode") String ifCode) { public ApiRes getByMchNo(@PathVariable(value = "isvNo") String isvNo, @PathVariable(value = "ifCode") String ifCode) {
PayInterfaceConfig payInterfaceConfig = payInterfaceConfigService.getByInfoIdAndIfCode(CS.INFO_TYPE_ISV, isvNo, ifCode); PayInterfaceConfig payInterfaceConfig = payInterfaceConfigService.getByInfoIdAndIfCode(CS.INFO_TYPE_ISV, isvNo, ifCode);
if (payInterfaceConfig != null && payInterfaceConfig.getIfRate() != null) { if (payInterfaceConfig != null) {
payInterfaceConfig.setIfRate(payInterfaceConfig.getIfRate().multiply(new BigDecimal("100"))); if (payInterfaceConfig.getIfRate() != null) {
payInterfaceConfig.setIfRate(payInterfaceConfig.getIfRate().multiply(new BigDecimal("100")));
}
if (StringUtils.isNotBlank(payInterfaceConfig.getIfParams())) {
IsvParams isvParams = IsvParams.factory(payInterfaceConfig.getIfCode(), payInterfaceConfig.getIfParams());
if (isvParams != null) {
payInterfaceConfig.setIfParams(isvParams.deSenData());
}
}
} }
return ApiRes.ok(payInterfaceConfig); return ApiRes.ok(payInterfaceConfig);
} }
...@@ -105,6 +118,9 @@ public class IsvPayInterfaceConfigController extends CommonCtrl { ...@@ -105,6 +118,9 @@ public class IsvPayInterfaceConfigController extends CommonCtrl {
//若配置存在,为saveOrUpdate添加ID,第一次配置添加创建者 //若配置存在,为saveOrUpdate添加ID,第一次配置添加创建者
if (dbRecoed != null) { if (dbRecoed != null) {
payInterfaceConfig.setId(dbRecoed.getId()); payInterfaceConfig.setId(dbRecoed.getId());
// 合并支付参数
payInterfaceConfig.setIfParams(StringKit.marge(dbRecoed.getIfParams(), payInterfaceConfig.getIfParams()));
}else { }else {
payInterfaceConfig.setCreatedUid(userId); payInterfaceConfig.setCreatedUid(userId);
payInterfaceConfig.setCreatedBy(realName); payInterfaceConfig.setCreatedBy(realName);
......
...@@ -26,6 +26,7 @@ import com.jeequan.jeepay.core.entity.MchApp; ...@@ -26,6 +26,7 @@ import com.jeequan.jeepay.core.entity.MchApp;
import com.jeequan.jeepay.core.model.ApiRes; import com.jeequan.jeepay.core.model.ApiRes;
import com.jeequan.jeepay.core.mq.MqCommonService; import com.jeequan.jeepay.core.mq.MqCommonService;
import com.jeequan.jeepay.core.utils.JsonKit; import com.jeequan.jeepay.core.utils.JsonKit;
import com.jeequan.jeepay.core.utils.StringKit;
import com.jeequan.jeepay.mgr.ctrl.CommonCtrl; import com.jeequan.jeepay.mgr.ctrl.CommonCtrl;
import com.jeequan.jeepay.service.impl.MchAppService; import com.jeequan.jeepay.service.impl.MchAppService;
import com.jeequan.jeepay.service.impl.MchInfoService; import com.jeequan.jeepay.service.impl.MchInfoService;
...@@ -59,14 +60,7 @@ public class MchAppController extends CommonCtrl { ...@@ -59,14 +60,7 @@ public class MchAppController extends CommonCtrl {
public ApiRes list() { public ApiRes list() {
MchApp mchApp = getObject(MchApp.class); MchApp mchApp = getObject(MchApp.class);
LambdaQueryWrapper<MchApp> wrapper = MchApp.gw(); IPage<MchApp> pages = mchAppService.selectPage(getIPage(), mchApp);
if (StringUtils.isNotEmpty(mchApp.getMchNo())) wrapper.eq(MchApp::getMchNo, mchApp.getMchNo());
if (StringUtils.isNotEmpty(mchApp.getAppId())) wrapper.eq(MchApp::getAppId, mchApp.getAppId());
if (StringUtils.isNotEmpty(mchApp.getAppName())) wrapper.eq(MchApp::getAppName, mchApp.getAppName());
if (mchApp.getState() != null) wrapper.eq(MchApp::getState, mchApp.getState());
wrapper.orderByDesc(MchApp::getCreatedAt);
IPage<MchApp> pages = mchAppService.page(getIPage(), wrapper);
return ApiRes.ok(pages); return ApiRes.ok(pages);
} }
...@@ -101,7 +95,7 @@ public class MchAppController extends CommonCtrl { ...@@ -101,7 +95,7 @@ public class MchAppController extends CommonCtrl {
@PreAuthorize("hasAnyAuthority('ENT_MCH_APP_VIEW', 'ENT_MCH_APP_EDIT')") @PreAuthorize("hasAnyAuthority('ENT_MCH_APP_VIEW', 'ENT_MCH_APP_EDIT')")
@GetMapping("/{appId}") @GetMapping("/{appId}")
public ApiRes detail(@PathVariable("appId") String appId) { public ApiRes detail(@PathVariable("appId") String appId) {
MchApp mchApp = mchAppService.getById(appId); MchApp mchApp = mchAppService.selectById(appId);
if (mchApp == null) { if (mchApp == null) {
return ApiRes.fail(ApiCodeEnum.SYS_OPERATION_FAIL_SELETE); return ApiRes.fail(ApiCodeEnum.SYS_OPERATION_FAIL_SELETE);
} }
......
...@@ -20,14 +20,20 @@ import com.jeequan.jeepay.core.aop.MethodLog; ...@@ -20,14 +20,20 @@ import com.jeequan.jeepay.core.aop.MethodLog;
import com.jeequan.jeepay.core.constants.ApiCodeEnum; import com.jeequan.jeepay.core.constants.ApiCodeEnum;
import com.jeequan.jeepay.core.constants.CS; import com.jeequan.jeepay.core.constants.CS;
import com.jeequan.jeepay.core.entity.MchApp; import com.jeequan.jeepay.core.entity.MchApp;
import com.jeequan.jeepay.core.entity.MchInfo;
import com.jeequan.jeepay.core.entity.PayInterfaceConfig; import com.jeequan.jeepay.core.entity.PayInterfaceConfig;
import com.jeequan.jeepay.core.entity.PayInterfaceDefine; import com.jeequan.jeepay.core.entity.PayInterfaceDefine;
import com.jeequan.jeepay.core.model.ApiRes; import com.jeequan.jeepay.core.model.ApiRes;
import com.jeequan.jeepay.core.model.params.NormalMchParams;
import com.jeequan.jeepay.core.mq.MqCommonService; import com.jeequan.jeepay.core.mq.MqCommonService;
import com.jeequan.jeepay.core.utils.JsonKit; import com.jeequan.jeepay.core.utils.JsonKit;
import com.jeequan.jeepay.core.utils.StringKit;
import com.jeequan.jeepay.mgr.ctrl.CommonCtrl; import com.jeequan.jeepay.mgr.ctrl.CommonCtrl;
import com.jeequan.jeepay.service.impl.MchAppService; import com.jeequan.jeepay.service.impl.MchAppService;
import com.jeequan.jeepay.service.impl.MchInfoService;
import com.jeequan.jeepay.service.impl.PayInterfaceConfigService; import com.jeequan.jeepay.service.impl.PayInterfaceConfigService;
import com.jeequan.jeepay.service.impl.SysConfigService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -49,6 +55,8 @@ public class MchPayInterfaceConfigController extends CommonCtrl { ...@@ -49,6 +55,8 @@ public class MchPayInterfaceConfigController extends CommonCtrl {
@Autowired private PayInterfaceConfigService payInterfaceConfigService; @Autowired private PayInterfaceConfigService payInterfaceConfigService;
@Autowired private MchAppService mchAppService; @Autowired private MchAppService mchAppService;
@Autowired private MqCommonService mqCommonService; @Autowired private MqCommonService mqCommonService;
@Autowired private MchInfoService mchInfoService;
@Autowired private SysConfigService sysConfigService;
/** /**
* @Author: ZhuXiao * @Author: ZhuXiao
...@@ -72,8 +80,25 @@ public class MchPayInterfaceConfigController extends CommonCtrl { ...@@ -72,8 +80,25 @@ public class MchPayInterfaceConfigController extends CommonCtrl {
@GetMapping("/{appId}/{ifCode}") @GetMapping("/{appId}/{ifCode}")
public ApiRes getByAppId(@PathVariable(value = "appId") String appId, @PathVariable(value = "ifCode") String ifCode) { public ApiRes getByAppId(@PathVariable(value = "appId") String appId, @PathVariable(value = "ifCode") String ifCode) {
PayInterfaceConfig payInterfaceConfig = payInterfaceConfigService.getByInfoIdAndIfCode(CS.INFO_TYPE_MCH_APP, appId, ifCode); PayInterfaceConfig payInterfaceConfig = payInterfaceConfigService.getByInfoIdAndIfCode(CS.INFO_TYPE_MCH_APP, appId, ifCode);
if (payInterfaceConfig != null && payInterfaceConfig.getIfRate() != null) { if (payInterfaceConfig != null) {
payInterfaceConfig.setIfRate(payInterfaceConfig.getIfRate().multiply(new BigDecimal("100"))); // 费率转换为百分比数值
if (payInterfaceConfig.getIfRate() != null) {
payInterfaceConfig.setIfRate(payInterfaceConfig.getIfRate().multiply(new BigDecimal("100")));
}
// 敏感数据脱敏
if (StringUtils.isNotBlank(payInterfaceConfig.getIfParams())) {
MchApp mchApp = mchAppService.getById(appId);
MchInfo mchInfo = mchInfoService.getById(mchApp.getMchNo());
// 普通商户的支付参数执行数据脱敏
if (mchInfo.getType() == CS.MCH_TYPE_NORMAL) {
NormalMchParams mchParams = NormalMchParams.factory(payInterfaceConfig.getIfCode(), payInterfaceConfig.getIfParams());
if (mchParams != null) {
payInterfaceConfig.setIfParams(mchParams.deSenData());
}
}
}
} }
return ApiRes.ok(payInterfaceConfig); return ApiRes.ok(payInterfaceConfig);
} }
...@@ -116,6 +141,9 @@ public class MchPayInterfaceConfigController extends CommonCtrl { ...@@ -116,6 +141,9 @@ public class MchPayInterfaceConfigController extends CommonCtrl {
//若配置存在,为saveOrUpdate添加ID,第一次配置添加创建者 //若配置存在,为saveOrUpdate添加ID,第一次配置添加创建者
if (dbRecoed != null) { if (dbRecoed != null) {
payInterfaceConfig.setId(dbRecoed.getId()); payInterfaceConfig.setId(dbRecoed.getId());
// 合并支付参数
payInterfaceConfig.setIfParams(StringKit.marge(dbRecoed.getIfParams(), payInterfaceConfig.getIfParams()));
}else { }else {
payInterfaceConfig.setCreatedUid(userId); payInterfaceConfig.setCreatedUid(userId);
payInterfaceConfig.setCreatedBy(realName); payInterfaceConfig.setCreatedBy(realName);
...@@ -132,4 +160,21 @@ public class MchPayInterfaceConfigController extends CommonCtrl { ...@@ -132,4 +160,21 @@ public class MchPayInterfaceConfigController extends CommonCtrl {
return ApiRes.ok(); return ApiRes.ok();
} }
/** 查询支付宝商户授权URL **/
@GetMapping("/alipayIsvsubMchAuthUrls/{mchAppId}")
public ApiRes queryAlipayIsvsubMchAuthUrl(@PathVariable String mchAppId) {
MchApp mchApp = mchAppService.getById(mchAppId);
MchInfo mchInfo = mchInfoService.getById(mchApp.getMchNo());
String authUrl = sysConfigService.getDBApplicationConfig().genAlipayIsvsubMchAuthUrl(mchInfo.getIsvNo(), mchAppId);
String authQrImgUrl = sysConfigService.getDBApplicationConfig().genScanImgUrl(authUrl);
JSONObject result = new JSONObject();
result.put("authUrl", authUrl);
result.put("authQrImgUrl", authQrImgUrl);
return ApiRes.ok(result);
}
} }
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment