记得上下班打卡 | 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
ad80cb1e
Commit
ad80cb1e
authored
Jul 04, 2025
by
wangyifan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
离线支付-斗拱接口
parent
61bbe216
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
262 additions
and
50 deletions
+262
-50
GoblinBraceletOrderPayParam.java
...net/service/goblin/param/GoblinBraceletOrderPayParam.java
+3
-0
DougongPayParam.java
...quidnet/service/goblin/param/dougong/DougongPayParam.java
+34
-0
DougongRequestParam.java
...net/service/goblin/param/dougong/DougongRequestParam.java
+109
-0
IGoblinDougongPayService.java
...dnet/service/goblin/service/IGoblinDougongPayService.java
+3
-1
GoblinDougongPayServiceImpl.java
...vice/goblin/service/impl/GoblinDougongPayServiceImpl.java
+20
-49
GoblinDougongPayServiceImplTest.java
.../service/goblin/test/GoblinDougongPayServiceImplTest.java
+93
-0
No files found.
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/param/GoblinBraceletOrderPayParam.java
View file @
ad80cb1e
...
...
@@ -34,4 +34,7 @@ public class GoblinBraceletOrderPayParam implements Serializable {
@NotBlank
(
message
=
"身份证号码不能为空"
)
private
String
idCard
;
@ApiModelProperty
(
value
=
"子商户用户标识"
)
@NotBlank
(
message
=
"openId不能为空"
)
private
String
subOpenId
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/param/dougong/DougongPayParam.java
0 → 100644
View file @
ad80cb1e
package
com
.
liquidnet
.
service
.
goblin
.
param
.
dougong
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
DougongPayParam
{
// 请求日期
private
String
reqDate
;
// 请求流水号
private
String
reqSeqId
;
// 交易类型
private
String
tradeType
;
// 商品描述
private
String
goodsDesc
;
// 交易总金额
private
String
transAmt
;
// 交易有效期
private
String
timeExpire
;
// 商品列表
private
List
<
DougongRequestParam
.
WxDataGoodsDetail
>
goodsDetailList
;
// 子商户用户标识
private
String
subOpenid
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/param/dougong/DougongRequestParam.java
0 → 100644
View file @
ad80cb1e
package
com
.
liquidnet
.
service
.
goblin
.
param
.
dougong
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
DougongRequestParam
{
// 请求日期
@JsonProperty
(
"req_date"
)
private
String
reqDate
;
// 请求流水号
@JsonProperty
(
"req_seq_id"
)
private
String
reqSeqId
;
// 商户号
@JsonProperty
(
"huifu_id"
)
private
String
huifuId
;
// 商品描述
@JsonProperty
(
"goods_desc"
)
private
String
goodsDesc
;
//交易类型
//T_JSAPI: 微信公众号
//T_MINIAPP: 微信小程序
//A_JSAPI: 支付宝JS
//A_NATIVE: 支付宝正扫
//U_NATIVE: 银联正扫
//U_JSAPI: 银联JS
//D_NATIVE: 数字人民币正扫
//T_H5:微信直连H5支付
//T_APP:微信APP支付
//T_NATIVE:微信正扫
@JsonProperty
(
"trade_type"
)
private
String
tradeType
;
// 交易金额
@JsonProperty
(
"trans_amt"
)
private
String
transAmt
;
// 交易有效期
@JsonProperty
(
"time_expire"
)
private
String
timeExpire
;
// 微信参数集合
@JsonProperty
(
"wx_data"
)
private
String
wxData
;
// 是否延迟交易
@JsonProperty
(
"delay_acct_flag"
)
private
String
delayAcctFlag
=
"N"
;
// 异步通知地址
@JsonProperty
(
"notify_url"
)
private
String
notifyUrl
;
@Data
public
static
class
WxData
{
//子商户应用ID
@JsonProperty
(
"sub_appid"
)
private
String
subAppid
;
// 子商户用户标识
@JsonProperty
(
"sub_openid"
)
private
String
subOpenid
;
//商品描述
@JsonProperty
(
"body"
)
private
String
body
;
// 商品详情
@JsonProperty
(
"detail"
)
private
WxDataDetail
detail
;
}
@Data
public
static
class
WxDataDetail
{
@JsonProperty
(
"cost_price"
)
private
String
costPrice
;
@JsonProperty
(
"goods_detail"
)
private
List
<
WxDataGoodsDetail
>
goodsDetail
;
}
@Data
public
static
class
WxDataGoodsDetail
{
// 商品编码
@JsonProperty
(
"goods_id"
)
private
String
goodsId
;
// 商品名称
@JsonProperty
(
"goods_name"
)
private
String
goodsName
;
// 商品单价(元)
@JsonProperty
(
"price"
)
private
String
price
;
// 商品数量
@JsonProperty
(
"quantity"
)
private
Integer
quantity
;
}
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/service/IGoblinDougongPayService.java
View file @
ad80cb1e
package
com
.
liquidnet
.
service
.
goblin
.
service
;
import
com.liquidnet.service.goblin.param.dougong.DougongRequestParam
;
public
interface
IGoblinDougongPayService
{
/**
*
* @return
*/
Object
jsPay
();
Object
jsPay
(
DougongRequestParam
requestParam
);
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinDougongPayServiceImpl.java
View file @
ad80cb1e
...
...
@@ -3,11 +3,12 @@ package com.liquidnet.service.goblin.service.impl;
import
com.huifu.bspay.sdk.opps.core.BasePay
;
import
com.huifu.bspay.sdk.opps.core.config.MerConfig
;
import
com.huifu.bspay.sdk.opps.core.net.BasePayRequest
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.goblin.param.dougong.DougongRequestParam
;
import
com.liquidnet.service.goblin.service.IGoblinDougongPayService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
java.util.HashMap
;
import
java.util.Map
;
@Slf4j
...
...
@@ -26,57 +27,27 @@ public class GoblinDougongPayServiceImpl implements IGoblinDougongPayService {
// 汇付公钥,用于对汇付返回报文进行签名验证
public
static
final
String
DEMO_RSA_PUBLIC_KEY
=
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkmP0eyQVeGHVxk/4+Zq9R6tm8vmQZaMAvtvy5D/Ki3lvhfRn8T3R3vP5xTpp2zAtmZzFnc1k4DswYBsv7lsxwseoJ3sIM6of6NYnf+39CK+NhKSsdDNDET2KCxD5Gip3WJVtgP3P4w3P/U2jCi8Xzm9sxy3XZ3TSZuokvX77UnfBZTFMuGjCmZFcuM6VjDOxoaEtnYhAVLOQItb3Jr1vvIg4vrhCWBus9YVgl3Ua5qtTccmpspnFbY3ix0UFrmHczTaPWrxKMrnEIDurgmMPXPiyR67Z/AcvcJ8vgvaVHnINmDb0hlRUkI623P9dO/fPswaNIEj0ZeoZHcdLya07swIDAQAB"
;
static
{
MerConfig
merConfig
=
new
MerConfig
();
merConfig
.
setProcutId
(
DEMO_PRODUCT_ID
);
merConfig
.
setSysId
(
DEMO_SYS_ID
);
merConfig
.
setRsaPrivateKey
(
DEMO_RSA_PRIVATE_KEY
);
merConfig
.
setRsaPublicKey
(
DEMO_RSA_PUBLIC_KEY
);
try
{
BasePay
.
initWithMerConfig
(
merConfig
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
}
}
@Override
public
Object
jsPay
()
{
public
Object
jsPay
(
DougongRequestParam
requestParam
)
{
try
{
// 1. 数据初始化,填入对应的商户配置
MerConfig
merConfig
=
new
MerConfig
();
merConfig
.
setProcutId
(
DEMO_PRODUCT_ID
);
merConfig
.
setSysId
(
DEMO_SYS_ID
);
merConfig
.
setRsaPrivateKey
(
DEMO_RSA_PRIVATE_KEY
);
merConfig
.
setRsaPublicKey
(
DEMO_RSA_PUBLIC_KEY
);
BasePay
.
initWithMerConfig
(
merConfig
);
// 2.组装请求参数
Map
<
String
,
Object
>
paramsInfo
=
new
HashMap
<>();
// 请求日期
paramsInfo
.
put
(
"req_date"
,
"20250704"
);
// 请求流水号
paramsInfo
.
put
(
"req_seq_id"
,
"rQ20250704120340955666"
);
// 商户号
paramsInfo
.
put
(
"huifu_id"
,
"6666000109133323"
);
// 商品描述
paramsInfo
.
put
(
"goods_desc"
,
"hibs自动化-通用版验证"
);
// 交易类型
paramsInfo
.
put
(
"trade_type"
,
"T_MINIAPP"
);
// 交易金额
paramsInfo
.
put
(
"trans_amt"
,
"0.10"
);
// 交易有效期
paramsInfo
.
put
(
"time_expire"
,
"20250718235959"
);
// 微信参数集合
paramsInfo
.
put
(
"wx_data"
,
"{\"sub_appid\":\"wxdfe9a5d141f96685\",\"sub_openid\":\"o8jhotzittQSetZ-N0Yj4Hz91Rqc\",\"detail\":{\"cost_price\":\"43.00\",\"receipt_id\":\"20220628132043853798\",\"goods_detail\":[{\"goods_id\":\"6934572310301\",\"goods_name\":\"太龙双黄连口服液\",\"price\":\"43.00\",\"quantity\":\"1\",\"wxpay_goods_id\":\"12235413214070356458058\"}]}}"
);
// 是否延迟交易
paramsInfo
.
put
(
"delay_acct_flag"
,
"N"
);
// 分账对象
paramsInfo
.
put
(
"acct_split_bunch"
,
"{\"acct_infos\":[{\"div_amt\":\"0.10\",\"huifu_id\":\"6666000109133323\"}]}"
);
// 传入分账遇到优惠的处理规则
paramsInfo
.
put
(
"term_div_coupon_type"
,
"0"
);
// 禁用信用卡标记
paramsInfo
.
put
(
"limit_pay_type"
,
"NO_CREDIT"
);
// 场景类型
paramsInfo
.
put
(
"pay_scene"
,
"02"
);
// 备注
paramsInfo
.
put
(
"remark"
,
"string"
);
// 安全信息
paramsInfo
.
put
(
"risk_check_data"
,
"{\"ip_addr\":\"180.167.105.130\",\"base_station\":\"192.168.1.1\",\"latitude\":\"33.3\",\"longitude\":\"33.3\"}"
);
// 设备信息
paramsInfo
.
put
(
"terminal_device_data"
,
"{\"device_type\":\"1\",\"device_ip\":\"10.10.0.1\",\"device_gps\":\"192.168.0.0\",\"devs_id\":\"SPINTP357338300264411\"}"
);
// 异步通知地址
paramsInfo
.
put
(
"notify_url"
,
"http://www.baidu.com"
);
// 3. 发起API调用
Map
<
String
,
Object
>
response
=
BasePayRequest
.
requestBasePay
(
"v3/trade/payment/jspay"
,
paramsInfo
,
null
,
false
);
;
System
.
out
.
println
(
response
);
Map
<
String
,
Object
>
map
=
JsonUtils
.
fromJson
(
JsonUtils
.
toJson
(
requestParam
),
Map
.
class
);
//3. 发起API调用
Map
<
String
,
Object
>
response
=
BasePayRequest
.
requestBasePay
(
"v3/trade/payment/jspay"
,
map
,
null
,
false
);
return
response
;
}
catch
(
Exception
e
)
{
log
.
error
(
"error"
,
e
);
}
...
...
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/test/java/com/liquidnet/service/goblin/test/GoblinDougongPayServiceImplTest.java
0 → 100644
View file @
ad80cb1e
package
com
.
liquidnet
.
service
.
goblin
.
test
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.goblin.param.dougong.DougongRequestParam
;
import
com.liquidnet.service.goblin.service.IGoblinDougongPayService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.Map
;
@Slf4j
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@SpringBootTest
public
class
GoblinDougongPayServiceImplTest
{
@Autowired
private
IGoblinDougongPayService
goblinDougongPayService
;
@Test
public
void
jsPay
(){
HashMap
<
String
,
Object
>
goods1
=
new
HashMap
<>();
goods1
.
put
(
"id"
,
"1"
);
goods1
.
put
(
"name"
,
"手环"
);
goods1
.
put
(
"price"
,
"1"
);
goods1
.
put
(
"number"
,
1
);
HashMap
<
String
,
Object
>
goods2
=
new
HashMap
<>();
goods2
.
put
(
"id"
,
"2"
);
goods2
.
put
(
"name"
,
"面额充值50元"
);
goods2
.
put
(
"price"
,
"50"
);
goods2
.
put
(
"number"
,
1
);
// 商品列表
ArrayList
<
Map
<
String
,
Object
>>
goodsList
=
new
ArrayList
<>();
goodsList
.
add
(
goods1
);
goodsList
.
add
(
goods2
);
// 商品描述
String
goodsDesc
=
"手环充值"
;
// 商品金额
BigDecimal
totalAmt
=
new
BigDecimal
(
"51.00"
);
// 商品请求流水号
String
setReqSeqId
=
"rQ20250704120340912341"
;
// 请求日期
String
reqDate
=
"20250704"
;
// 交易类型
String
tradeType
=
"T_MINIAPP"
;
DougongRequestParam
requestParam
=
new
DougongRequestParam
();
requestParam
.
setReqDate
(
reqDate
);
requestParam
.
setReqSeqId
(
setReqSeqId
);
requestParam
.
setHuifuId
(
"6666000109133323"
);
//TODO 配置
requestParam
.
setGoodsDesc
(
goodsDesc
);
requestParam
.
setTradeType
(
tradeType
);
requestParam
.
setTransAmt
(
totalAmt
.
toString
());
requestParam
.
setTimeExpire
(
"20250718235959"
);
//TODO 在计算
requestParam
.
setNotifyUrl
(
"http://www.baidu.com"
);
//TODO 配置
ArrayList
<
DougongRequestParam
.
WxDataGoodsDetail
>
wxDataGoodsDetails
=
new
ArrayList
<>();
for
(
Map
<
String
,
Object
>
stringObjectMap
:
goodsList
)
{
DougongRequestParam
.
WxDataGoodsDetail
wxDataGoodsDetail
=
new
DougongRequestParam
.
WxDataGoodsDetail
();
wxDataGoodsDetail
.
setGoodsId
(
String
.
valueOf
(
stringObjectMap
.
get
(
"id"
)));
wxDataGoodsDetail
.
setGoodsName
(
String
.
valueOf
(
stringObjectMap
.
get
(
"name"
)));
wxDataGoodsDetail
.
setPrice
(
String
.
valueOf
(
stringObjectMap
.
get
(
"price"
)));
wxDataGoodsDetail
.
setQuantity
((
Integer
)
stringObjectMap
.
get
(
"number"
));
wxDataGoodsDetails
.
add
(
wxDataGoodsDetail
);
}
DougongRequestParam
.
WxDataDetail
wxDataDetail
=
new
DougongRequestParam
.
WxDataDetail
();
wxDataDetail
.
setCostPrice
(
totalAmt
.
toString
());
wxDataDetail
.
setGoodsDetail
(
wxDataGoodsDetails
);
DougongRequestParam
.
WxData
wxData
=
new
DougongRequestParam
.
WxData
();
wxData
.
setSubAppid
(
"wxdfe9a5d141f96685"
);
//TODO 配置
wxData
.
setSubOpenid
(
"o8jhotzittQSetZ-N0Yj4Hz91Rqc"
);
//TODO 前端带过来
wxData
.
setBody
(
goodsDesc
);
wxData
.
setDetail
(
wxDataDetail
);
requestParam
.
setWxData
(
JsonUtils
.
toJson
(
wxData
));
System
.
out
.
println
(
goblinDougongPayService
.
jsPay
(
requestParam
));
}
}
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