Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Jeepay
Commits
63bbef99
Commit
63bbef99
authored
Jul 19, 2021
by
terrfly
Browse files
Merge remote-tracking branch 'origin/dev' into master
parents
48c5d532
49edc927
Changes
39
Hide whitespace changes
Inline
Side-by-side
conf/manager/application.yml
View file @
63bbef99
...
...
@@ -9,37 +9,82 @@
# 该yml文件只配置与环境相关的参数, 其他配置读取项目下的配置项
#
#################################
server
:
port
:
9217
#设置端口为 9217
port
:
9217
#设置端口
servlet
:
context-path
:
/
#设置应用的目录. 前缀需要带/, 无需设置后缀, 示例 【 /xxx 】 or 【 / 】
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
:
# 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
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
:
host
:
127.0.0.1
port
:
6379
database
:
1
#1库:运营平台 #2库:商户系统 #3库:支付网关
timeout
:
1000
password
:
# 注意:以下MQ配置需注意【如需使用activeMQ则需将rabbitMQ配置注释即可】
profiles
:
include
:
-
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
:
broker-url
:
tcp://localhost:61616
#连接地址
#rabbitmq配置
rabbitmq
:
addresses
:
127.0.0.1:5672
username
:
guest
password
:
guest
dynamic
:
true
virtual-host
:
/
#rabbitmq配置
# rabbitmq:
# addresses: 127.0.0.1:5672
# username: guest
# password: guest
# dynamic: true
# virtual-host: /
#rocketmq配置
# rocketmq:
# name-server: 127.0.0.1:9876
# producer:
# group: rocket-group
#日志配置参数。
# 当存在logback-spring.xml文件时: 该配置将引进到logback配置, springboot配置不生效。
...
...
@@ -52,9 +97,26 @@ logging:
#系统业务参数
isys
:
allow-cors
:
false
#是否允许跨域请求 [生产环境建议关闭, 若api与前端项目没有在同一个域名下时,应开启此配置或在nginx统一配置允许跨域]
jwt-secret
:
t7w3P8X6472qWc3u
#生成jwt的秘钥。 要求每个系统有单独的秘钥管理机制。
# 文件系统配置项(系统内oss, 并非云oss)
oss-file
:
root-path
:
/home/jeepay/upload
#存储根路径 ( 无需以‘/’结尾 )
#是否允许跨域请求 [生产环境建议关闭, 若api与前端项目没有在同一个域名下时,应开启此配置或在nginx统一配置允许跨域]
allow-cors
:
true
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
conf/merchant/application.yml
View file @
63bbef99
...
...
@@ -9,37 +9,82 @@
# 该yml文件只配置与环境相关的参数, 其他配置读取项目下的配置项
#
#################################
server
:
port
:
9218
# 设置端口为 9218
port
:
9218
#设置端口
servlet
:
context-path
:
/
#设置应用的目录. 前缀需要带/, 无需设置后缀, 示例 【 /xxx 】 or 【 / 】
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
:
# 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
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
:
host
:
127.0.0.1
port
:
6379
database
:
2
#1库:运营平台 #2库:商户系统 #3库:支付网关
timeout
:
1000
password
:
# 注意:以下MQ配置需注意【如需使用activeMQ则需将rabbitMQ配置注释即可】
profiles
:
include
:
-
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
:
broker-url
:
tcp://localhost:61616
#连接地址
#rabbitmq配置
rabbitmq
:
addresses
:
127.0.0.1:5672
username
:
guest
password
:
guest
dynamic
:
true
virtual-host
:
/
#rabbitmq配置
# rabbitmq:
# addresses: 127.0.0.1:5672
# username: guest
# password: guest
# dynamic: true
# virtual-host: /
#rocketmq配置
# rocketmq:
# name-server: 127.0.0.1:9876
# producer:
# group: rocket-group
#日志配置参数。
# 当存在logback-spring.xml文件时: 该配置将引进到logback配置, springboot配置不生效。
...
...
@@ -52,9 +97,26 @@ logging:
#系统业务参数
isys
:
allow-cors
:
false
#是否允许跨域请求 [生产环境建议关闭, 若api与前端项目没有在同一个域名下时,应开启此配置或在nginx统一配置允许跨域]
jwt-secret
:
ARNXp4MzjOOQqxtv
#生成jwt的秘钥。 要求每个系统有单独的秘钥管理机制。
# 文件系统配置项(系统内oss, 并非云oss)
oss-file
:
root-path
:
/home/jeepay/upload
#存储根路径 ( 无需以‘/’结尾 )
\ No newline at end of file
#是否允许跨域请求 [生产环境建议关闭, 若api与前端项目没有在同一个域名下时,应开启此配置或在nginx统一配置允许跨域]
allow-cors
:
true
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
conf/payment/application.yml
View file @
63bbef99
...
...
@@ -9,37 +9,82 @@
# 该yml文件只配置与环境相关的参数, 其他配置读取项目下的配置项
#
#################################
server
:
port
:
9216
#设置端口为 9216
port
:
9216
#设置端口
servlet
:
context-path
:
/
#设置应用的目录. 前缀需要带/, 无需设置后缀, 示例 【 /xxx 】 or 【 / 】
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
:
# 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
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
:
host
:
127.0.0.1
port
:
6379
database
:
3
#1库:运营平台 #2库:商户系统 #3库:支付网关
timeout
:
1000
password
:
# 注意:以下MQ配置需注意【如需使用activeMQ则需将rabbitMQ配置注释即可】
profiles
:
include
:
-
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
:
broker-url
:
tcp://localhost:61616
#连接地址
#rabbitmq配置
rabbitmq
:
addresses
:
127.0.0.1:5672
username
:
guest
password
:
guest
dynamic
:
true
virtual-host
:
/
#rabbitmq配置
# rabbitmq:
# addresses: 127.0.0.1:5672
# username: guest
# password: guest
# dynamic: true
# virtual-host: /
#rocketmq配置
# rocketmq:
# name-server: 127.0.0.1:9876
# producer:
# group: rocket-group
#日志配置参数。
# 当存在logback-spring.xml文件时: 该配置将引进到logback配置, springboot配置不生效。
...
...
@@ -52,8 +97,24 @@ logging:
#系统业务参数
isys
:
allow-cors
:
false
#是否允许跨域请求 [生产环境建议关闭, 若api与前端项目没有在同一个域名下时,应开启此配置或在nginx统一配置允许跨域]
# 文件系统配置项(系统内oss, 并非云oss)
oss-file
:
root-path
:
/home/jeepay/upload
#存储根路径 ( 无需以‘/’结尾 )
\ No newline at end of file
#是否允许跨域请求 [生产环境建议关闭, 若api与前端项目没有在同一个域名下时,应开启此配置或在nginx统一配置允许跨域]
allow-cors
:
true
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
docs/sql/init.sql
View file @
63bbef99
...
...
@@ -188,6 +188,7 @@ CREATE TABLE `t_pay_interface_define` (
`if_name`
VARCHAR
(
20
)
NOT
NULL
COMMENT
'接口名称'
,
`is_mch_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字符串'
,
`isvsub_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', '云闪付条码')
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
)
VALUES
(
'alipay'
,
'支付宝官方'
,
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":""}]'
,
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"},{"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"}]'
,
'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
)
VALUES
(
'wxpay'
,
'微信支付官方'
,
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":""}]'
,
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"},{"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"}]'
,
'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
)
VALUES
(
'ysfpay'
,
'云闪付官方'
,
0
,
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"}]'
,
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"}]'
,
...
...
docs/sql/patch.sql
View file @
63bbef99
...
...
@@ -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
,
'云闪付官方通道'
);
jeepay-core/src/main/java/com/jeequan/jeepay/core/entity/PayInterfaceDefine.java
View file @
63bbef99
...
...
@@ -70,6 +70,11 @@ public class PayInterfaceDefine extends BaseModel implements Serializable {
*/
private
Byte
isIsvMode
;
/**
* 支付参数配置页面类型:1-JSON渲染,2-自定义
*/
private
Byte
configPageType
;
/**
* ISV接口配置定义描述,json字符串
*/
...
...
jeepay-core/src/main/java/com/jeequan/jeepay/core/model/DBApplicationConfig.java
View file @
63bbef99
...
...
@@ -64,4 +64,9 @@ public class DBApplicationConfig implements Serializable {
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
;
}
}
jeepay-core/src/main/java/com/jeequan/jeepay/core/model/params/IsvParams.java
View file @
63bbef99
...
...
@@ -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.ysf.YsfpayIsvParams
;
/*
/*
*
* 抽象类 isv参数定义
*
* @author terrfly
* @site https://www.jeepay.vip
* @date 2021/6/8 16:33
* @modify ZhuXiao
*/
public
abstract
class
IsvParams
{
...
...
@@ -42,4 +43,9 @@ public abstract class IsvParams {
return
null
;
}
/**
* 敏感数据脱敏
*/
public
abstract
String
deSenData
();
}
jeepay-core/src/main/java/com/jeequan/jeepay/core/model/params/NormalMchParams.java
View file @
63bbef99
...
...
@@ -39,4 +39,9 @@ public abstract class NormalMchParams {
return
null
;
}
/**
* 敏感数据脱敏
*/
public
abstract
String
deSenData
();
}
jeepay-core/src/main/java/com/jeequan/jeepay/core/model/params/alipay/AlipayConfig.java
View file @
63bbef99
...
...
@@ -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
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
CHARSET
=
"UTF-8"
;
...
...
jeepay-core/src/main/java/com/jeequan/jeepay/core/model/params/alipay/AlipayIsvParams.java
View file @
63bbef99
...
...
@@ -15,8 +15,12 @@
*/
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.utils.StringKit
;
import
lombok.Data
;
import
org.apache.commons.lang3.StringUtils
;
/*
* 支付宝 isv参数定义
...
...
@@ -58,4 +62,17 @@ public class AlipayIsvParams extends IsvParams {
/** 支付宝根证书 **/
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
();
}
}
jeepay-core/src/main/java/com/jeequan/jeepay/core/model/params/alipay/AlipayNormalMchParams.java
View file @
63bbef99
...
...
@@ -15,8 +15,12 @@
*/
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.utils.StringKit
;
import
lombok.Data
;
import
org.apache.commons.lang3.StringUtils
;
/*
* 支付宝 普通商户参数定义
...
...
@@ -55,5 +59,17 @@ public class AlipayNormalMchParams extends NormalMchParams {
/** 支付宝根证书 **/
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
();
}
}
jeepay-core/src/main/java/com/jeequan/jeepay/core/model/params/wxpay/WxpayIsvParams.java
View file @
63bbef99
...
...
@@ -15,8 +15,12 @@
*/
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.utils.StringKit
;
import
lombok.Data
;
import
org.apache.commons.lang3.StringUtils
;
/*
* 微信官方支付 配置参数
...
...
@@ -61,4 +65,23 @@ public class WxpayIsvParams extends IsvParams {
/** 私钥文件(.pem格式) **/
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
();
}
}
jeepay-core/src/main/java/com/jeequan/jeepay/core/model/params/wxpay/WxpayNormalMchParams.java
View file @
63bbef99
...
...
@@ -15,8 +15,12 @@
*/
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.utils.StringKit
;
import
lombok.Data
;
import
org.apache.commons.lang3.StringUtils
;
/*
* 微信官方支付 配置参数
...
...
@@ -28,34 +32,72 @@ import lombok.Data;
@Data
public
class
WxpayNormalMchParams
extends
NormalMchParams
{
/** 应用App ID */
/**
* 应用App ID
*/
private
String
appId
;
/** 应用AppSecret */
/**
* 应用AppSecret
*/
private
String
appSecret
;
/** 微信支付商户号 */
/**
* 微信支付商户号
*/
private
String
mchId
;
/** oauth2地址 */
/**
* oauth2地址
*/
private
String
oauth2Url
;
/** API密钥 */
/**
* API密钥
*/
private
String
key
;
/** 微信支付API版本 **/
/**
* 微信支付API版本
**/
private
String
apiVersion
;
/** API V3秘钥 **/
/**
* API V3秘钥
**/
private
String
apiV3Key
;
/** 序列号 **/
/**
* 序列号
**/
private
String
serialNo
;
/** API证书(.p12格式)**/
/**
* API证书(.p12格式)
**/
private
String
cert
;
/** 私钥文件(.pem格式) **/
/**
* 私钥文件(.pem格式)
**/
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
();
}
}
jeepay-core/src/main/java/com/jeequan/jeepay/core/model/params/ysf/YsfpayIsvParams.java
View file @
63bbef99
...
...
@@ -15,8 +15,12 @@
*/
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.utils.StringKit
;
import
lombok.Data
;
import
org.apache.commons.lang3.StringUtils
;
/*
* 云闪付 配置信息
...
...
@@ -46,4 +50,17 @@ public class YsfpayIsvParams extends IsvParams {
/** acqOrgCodeList 支付机构号 **/
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
();
}
}
jeepay-core/src/main/java/com/jeequan/jeepay/core/utils/JeepayKit.java
View file @
63bbef99
...
...
@@ -20,9 +20,7 @@ import com.jeequan.jeepay.core.constants.CS;
import
com.jeequan.jeepay.core.exception.BizException
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
sun.misc.BASE64Decoder
;
import
java.io.IOException
;
import
java.io.UnsupportedEncodingException
;
import
java.security.MessageDigest
;
import
java.security.NoSuchAlgorithmException
;
...
...
@@ -34,7 +32,7 @@ import java.util.regex.Pattern;
/*
* jeepay工具类
*
*
* @author terrfly
* @site https://www.jeepay.vip
* @date 2021/6/8 16:50
...
...
@@ -42,13 +40,7 @@ import java.util.regex.Pattern;
@Slf4j
public
class
JeepayKit
{
public
static
byte
[]
AES_KEY
=
null
;
static
{
try
{
AES_KEY
=
new
BASE64Decoder
().
decodeBuffer
(
"4ChT08phkz59hquD795X7w=="
);
}
catch
(
IOException
e
)
{
}
}
public
static
byte
[]
AES_KEY
=
"4ChT08phkz59hquD795X7w=="
.
getBytes
();
/** 加密 **/
public
static
String
aesEncode
(
String
str
){
...
...
jeepay-core/src/main/java/com/jeequan/jeepay/core/utils/StringKit.java
View file @
63bbef99
...
...
@@ -16,6 +16,7 @@
package
com.jeequan.jeepay.core.utils
;
import
cn.hutool.core.net.url.UrlBuilder
;
import
com.alibaba.fastjson.JSONObject
;
import
org.apache.commons.lang3.StringUtils
;
import
java.util.Map
;
...
...
@@ -65,4 +66,83 @@ public class StringKit {
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
();
}
}
jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/ctrl/isv/IsvPayInterfaceConfigController.java
View file @
63bbef99
...
...
@@ -15,21 +15,26 @@
*/
package
com.jeequan.jeepay.mgr.ctrl.isv
;
import
com.alibaba.fastjson.JSONObject
;
import
com.jeequan.jeepay.core.aop.MethodLog
;
import
com.jeequan.jeepay.core.constants.ApiCodeEnum
;
import
com.jeequan.jeepay.core.constants.CS
;
import
com.jeequan.jeepay.core.entity.PayInterfaceConfig
;
import
com.jeequan.jeepay.core.entity.PayInterfaceDefine
;
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.utils.StringKit
;
import
com.jeequan.jeepay.mgr.ctrl.CommonCtrl
;
import
com.jeequan.jeepay.service.impl.PayInterfaceConfigService
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
import
java.math.BigDecimal
;
import
java.util.List
;
import
java.util.Map
;
/**
* 服务商支付接口管理类
...
...
@@ -67,8 +72,16 @@ public class IsvPayInterfaceConfigController extends CommonCtrl {
@GetMapping
(
"/{isvNo}/{ifCode}"
)
public
ApiRes
getByMchNo
(
@PathVariable
(
value
=
"isvNo"
)
String
isvNo
,
@PathVariable
(
value
=
"ifCode"
)
String
ifCode
)
{
PayInterfaceConfig
payInterfaceConfig
=
payInterfaceConfigService
.
getByInfoIdAndIfCode
(
CS
.
INFO_TYPE_ISV
,
isvNo
,
ifCode
);
if
(
payInterfaceConfig
!=
null
&&
payInterfaceConfig
.
getIfRate
()
!=
null
)
{
payInterfaceConfig
.
setIfRate
(
payInterfaceConfig
.
getIfRate
().
multiply
(
new
BigDecimal
(
"100"
)));
if
(
payInterfaceConfig
!=
null
)
{
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
);
}
...
...
@@ -105,6 +118,9 @@ public class IsvPayInterfaceConfigController extends CommonCtrl {
//若配置存在,为saveOrUpdate添加ID,第一次配置添加创建者
if
(
dbRecoed
!=
null
)
{
payInterfaceConfig
.
setId
(
dbRecoed
.
getId
());
// 合并支付参数
payInterfaceConfig
.
setIfParams
(
StringKit
.
marge
(
dbRecoed
.
getIfParams
(),
payInterfaceConfig
.
getIfParams
()));
}
else
{
payInterfaceConfig
.
setCreatedUid
(
userId
);
payInterfaceConfig
.
setCreatedBy
(
realName
);
...
...
jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/ctrl/merchant/MchAppController.java
View file @
63bbef99
...
...
@@ -26,6 +26,7 @@ import com.jeequan.jeepay.core.entity.MchApp;
import
com.jeequan.jeepay.core.model.ApiRes
;
import
com.jeequan.jeepay.core.mq.MqCommonService
;
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.service.impl.MchAppService
;
import
com.jeequan.jeepay.service.impl.MchInfoService
;
...
...
@@ -59,14 +60,7 @@ public class MchAppController extends CommonCtrl {
public
ApiRes
list
()
{
MchApp
mchApp
=
getObject
(
MchApp
.
class
);
LambdaQueryWrapper
<
MchApp
>
wrapper
=
MchApp
.
gw
();
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
);
IPage
<
MchApp
>
pages
=
mchAppService
.
selectPage
(
getIPage
(),
mchApp
);
return
ApiRes
.
ok
(
pages
);
}
...
...
@@ -101,7 +95,7 @@ public class MchAppController extends CommonCtrl {
@PreAuthorize
(
"hasAnyAuthority('ENT_MCH_APP_VIEW', 'ENT_MCH_APP_EDIT')"
)
@GetMapping
(
"/{appId}"
)
public
ApiRes
detail
(
@PathVariable
(
"appId"
)
String
appId
)
{
MchApp
mchApp
=
mchAppService
.
ge
tById
(
appId
);
MchApp
mchApp
=
mchAppService
.
selec
tById
(
appId
);
if
(
mchApp
==
null
)
{
return
ApiRes
.
fail
(
ApiCodeEnum
.
SYS_OPERATION_FAIL_SELETE
);
}
...
...
jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/ctrl/merchant/MchPayInterfaceConfigController.java
View file @
63bbef99
...
...
@@ -20,14 +20,20 @@ import com.jeequan.jeepay.core.aop.MethodLog;
import
com.jeequan.jeepay.core.constants.ApiCodeEnum
;
import
com.jeequan.jeepay.core.constants.CS
;
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.PayInterfaceDefine
;
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.utils.JsonKit
;
import
com.jeequan.jeepay.core.utils.StringKit
;
import
com.jeequan.jeepay.mgr.ctrl.CommonCtrl
;
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.SysConfigService
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
...
...
@@ -49,6 +55,8 @@ public class MchPayInterfaceConfigController extends CommonCtrl {
@Autowired
private
PayInterfaceConfigService
payInterfaceConfigService
;
@Autowired
private
MchAppService
mchAppService
;
@Autowired
private
MqCommonService
mqCommonService
;
@Autowired
private
MchInfoService
mchInfoService
;
@Autowired
private
SysConfigService
sysConfigService
;
/**
* @Author: ZhuXiao
...
...
@@ -72,8 +80,25 @@ public class MchPayInterfaceConfigController extends CommonCtrl {
@GetMapping
(
"/{appId}/{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
);
if
(
payInterfaceConfig
!=
null
&&
payInterfaceConfig
.
getIfRate
()
!=
null
)
{
payInterfaceConfig
.
setIfRate
(
payInterfaceConfig
.
getIfRate
().
multiply
(
new
BigDecimal
(
"100"
)));
if
(
payInterfaceConfig
!=
null
)
{
// 费率转换为百分比数值
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
);
}
...
...
@@ -116,6 +141,9 @@ public class MchPayInterfaceConfigController extends CommonCtrl {
//若配置存在,为saveOrUpdate添加ID,第一次配置添加创建者
if
(
dbRecoed
!=
null
)
{
payInterfaceConfig
.
setId
(
dbRecoed
.
getId
());
// 合并支付参数
payInterfaceConfig
.
setIfParams
(
StringKit
.
marge
(
dbRecoed
.
getIfParams
(),
payInterfaceConfig
.
getIfParams
()));
}
else
{
payInterfaceConfig
.
setCreatedUid
(
userId
);
payInterfaceConfig
.
setCreatedBy
(
realName
);
...
...
@@ -132,4 +160,21 @@ public class MchPayInterfaceConfigController extends CommonCtrl {
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
);
}
}
Prev
1
2
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment