记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
董敬伟
liquidnet-bus-v1
Commits
e2af0d21
Commit
e2af0d21
authored
Jul 04, 2025
by
wangyifan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
离线支付-签名、验签工具;sql
parent
84bc5fd0
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
123 additions
and
1 deletion
+123
-1
goblin_recharge.sql
...in/liquidnet-service-goblin-impl/docu/goblin_recharge.sql
+54
-1
DougongSignUtils.java
...a/com/liquidnet/service/goblin/util/DougongSignUtils.java
+69
-0
No files found.
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/docu/goblin_recharge.sql
View file @
e2af0d21
...
...
@@ -20,4 +20,57 @@ CREATE TABLE IF NOT EXISTS goblin_recharge_amount
created_at
timestamp
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'创建时间'
,
updated_at
timestamp
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'更新时间'
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COMMENT
=
'充值金额选项表'
;
\ No newline at end of file
DEFAULT
CHARSET
=
utf8mb4
COMMENT
=
'充值金额选项表'
;
-- 手环订单表
CREATE
TABLE
`goblin_recharge_order`
(
`mid`
int
(
10
)
unsigned
NOT
NULL
AUTO_INCREMENT
,
`order_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'order_id'
,
`user_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'用户id'
,
`user_name`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'用户昵称'
,
`user_mobile`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'用户手机号'
,
`bind_name`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'绑定用户姓名'
,
`bind_mobile`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'绑定用户手机号'
,
`bind_idcard`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'绑定用户身份证号码'
,
`req_date`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'请求日期'
,
`goods_desc`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'请求日期'
,
`req_seq_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'请求流水号'
,
`hf_seq_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'全局流水号'
,
`trade_type`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'交易类型 T_JSAPI: 微信公众号支付 T_MINIAPP: 微信小程序支付 A_JSAPI: 支付宝JS A_NATIVE: 支付宝正扫 U_NATIVE: 银联正扫 U_JSAPI: 银联 JS D_NATIVE: 数字人民币正扫 T_H5:微信直连H5支付 T_APP:微信APP支付 T_NATIVE:微信正扫'
,
`atu_sub_mer_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'ATU真实商户号'
,
`device_type`
varchar
(
20
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'终端类型 01-智能POS 02-扫码POS 03-云音箱 04-台牌 05-云打印 06-扫脸设备 07-收银机 08-收银助手 09-传统POS 10-一体音箱 11-虚拟终端'
,
`out_trans_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'用户账单上的交易订单号'
,
`party_order_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'用户账单上的商户订单号'
,
`end_time`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'支付完成时间 格式yyyyMMddHHmmss'
,
`acct_date`
varchar
(
20
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'入账时间 格式为yyyyMMdd'
,
`price`
decimal
(
8
,
2
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'单价'
,
`price_total`
decimal
(
8
,
2
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'应付价格'
,
`price_actual`
decimal
(
8
,
2
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'实付价格'
,
`price_refund`
decimal
(
8
,
2
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'退款价格'
,
`refund_price_charges`
decimal
(
10
,
2
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'退款扣除的手续费金额'
,
`refund_number`
int
(
11
)
NOT
NULL
DEFAULT
'0'
COMMENT
'退款数'
,
`time_pay`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
DEFAULT
''
COMMENT
'支付时间'
,
`status`
tinyint
(
4
)
NOT
NULL
DEFAULT
'0'
COMMENT
'订单状态:0待付款,1已付款,2已关闭,3正在退款,4已退款, 5待关闭 6部分退款'
,
`pay_status`
tinyint
(
4
)
NOT
NULL
DEFAULT
'0'
COMMENT
'支付状态:0未支付 1已支付 2支付失败'
,
`created_at`
timestamp
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'创建时间'
,
`updated_at`
timestamp
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'更新时间'
,
`comment`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
DEFAULT
''
COMMENT
'comment'
,
PRIMARY
KEY
(
`mid`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_0900_ai_ci
COMMENT
=
'手环订单表'
;
-- 手环订单详情表
CREATE
TABLE
`goblin_recharge_order_entities`
(
`mid`
int
(
10
)
unsigned
NOT
NULL
AUTO_INCREMENT
,
`order_entities_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'order_entities_id'
,
`order_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'订单详情关联id'
,
`goods_type`
tinyint
(
4
)
NOT
NULL
DEFAULT
'0'
COMMENT
'商品类型: 1:手环 2:充值面值'
,
`goods_id`
varchar
(
64
)
NOT
NULL
DEFAULT
''
COMMENT
'商品ID wristband_id:手环ID amount_id:充值金额ID'
,
`goods_name`
varchar
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'商品名称'
,
`goods_price`
decimal
(
10
,
2
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'商品金额'
,
`status`
tinyint
(
4
)
NOT
NULL
DEFAULT
'0'
COMMENT
'订单状态:0待付款,1已付款,2已关闭,3正在退款,4已退款, 5待关闭 6部分退款'
,
`pay_status`
tinyint
(
4
)
NOT
NULL
DEFAULT
'0'
COMMENT
'支付状态:0未支付 1已支付 2支付失败'
,
`created_at`
timestamp
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'创建时间'
,
`updated_at`
timestamp
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'更新时间'
,
PRIMARY
KEY
(
`mid`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_0900_ai_ci
COMMENT
=
'手环订单详情表'
;
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/util/DougongSignUtils.java
0 → 100644
View file @
e2af0d21
package
com
.
liquidnet
.
service
.
goblin
.
util
;
import
lombok.extern.slf4j.Slf4j
;
import
java.security.KeyFactory
;
import
java.security.PrivateKey
;
import
java.security.PublicKey
;
import
java.security.Signature
;
import
java.security.spec.PKCS8EncodedKeySpec
;
import
java.security.spec.X509EncodedKeySpec
;
import
java.util.Base64
;
@Slf4j
public
class
DougongSignUtils
{
/**
* RSA私钥签名:签名方式SHA256WithRSA
* @param data 待签名字符串
* @param privateKeyBase64 私钥(Base64编码)
* @return 签名byte[]
* @throws Exception
*/
public
static
String
sign
(
String
data
,
String
privateKeyBase64
)
{
// Base64 --> Key
try
{
byte
[]
bytes
=
Base64
.
getDecoder
().
decode
(
privateKeyBase64
);
PKCS8EncodedKeySpec
keySpec
=
new
PKCS8EncodedKeySpec
(
bytes
);
KeyFactory
keyFactory
;
keyFactory
=
KeyFactory
.
getInstance
(
"RSA"
);
PrivateKey
privateKey
=
keyFactory
.
generatePrivate
(
keySpec
);
// Sign
Signature
signature
=
Signature
.
getInstance
(
"SHA256WithRSA"
);
signature
.
initSign
(
privateKey
);
signature
.
update
(
data
.
getBytes
(
"UTF-8"
));
return
Base64
.
getEncoder
().
encodeToString
(
signature
.
sign
());
}
catch
(
Exception
e
)
{
return
null
;
}
}
/**
* 使用汇付RSA公钥验签
* @param data 待签名字符串
* @param publicKeyBase64 公钥(Base64编码)
* @return 验签结果
* @throws Exception
*/
public
static
boolean
verify
(
String
data
,
String
publicKeyBase64
,
String
sign
)
{
// Base64 --> Key
try
{
byte
[]
bytes
=
Base64
.
getDecoder
().
decode
(
publicKeyBase64
);
X509EncodedKeySpec
keySpec
=
new
X509EncodedKeySpec
(
bytes
);
KeyFactory
keyFactory
;
keyFactory
=
KeyFactory
.
getInstance
(
"RSA"
);
PublicKey
publicKey
=
keyFactory
.
generatePublic
(
keySpec
);
// verify
Signature
signature
=
Signature
.
getInstance
(
"SHA256WithRSA"
);
signature
.
initVerify
(
publicKey
);
signature
.
update
(
data
.
getBytes
(
"UTF-8"
));
return
signature
.
verify
(
Base64
.
getDecoder
().
decode
(
sign
));
}
catch
(
Exception
e
)
{
log
.
error
(
"Exception"
,
e
);
return
false
;
}
}
}
Write
Preview
Markdown
is supported
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