记得上下班打卡 | 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
d7a65568
Commit
d7a65568
authored
Jun 29, 2021
by
jiangxiulong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
callback
parent
1f5827df
Changes
6
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
1055 additions
and
0 deletions
+1055
-0
PerformancesExpressCallbackController.java
...press/shunfeng/PerformancesExpressCallbackController.java
+37
-0
OrderRefundCallbackController.java
...form/controller/refund/OrderRefundCallbackController.java
+55
-0
PerformancesExpressCallbackServiceImpl.java
...ress/shunfeng/PerformancesExpressCallbackServiceImpl.java
+126
-0
KylinRefundsStatusServiceImpl.java
...latform/service/refund/KylinRefundsStatusServiceImpl.java
+482
-0
OrderRefundsCallbackServiceImpl.java
...tform/service/refund/OrderRefundsCallbackServiceImpl.java
+178
-0
ShunfengSignUtils.java
...m/liquidnet/service/platform/utils/ShunfengSignUtils.java
+177
-0
No files found.
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/controller/express/shunfeng/PerformancesExpressCallbackController.java
0 → 100644
View file @
d7a65568
package
com
.
liquidnet
.
service
.
platform
.
controller
.
express
.
shunfeng
;
import
com.liquidnet.service.platform.service.express.shunfeng.PerformancesExpressCallbackServiceImpl
;
import
io.swagger.annotations.Api
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
/**
* <p>
* 演出快递 顺丰推送
* </p>
*
* @author jiangxiulong
* @since 2021-06-29
*/
@Api
(
tags
=
"前端-shunfengBack"
)
@RestController
@RequestMapping
(
"performancesExpress"
)
public
class
PerformancesExpressCallbackController
{
@Autowired
private
PerformancesExpressCallbackServiceImpl
performancesExpressServiceImpl
;
/**
* 订单状态推送
*/
/**
* 路由推送
*/
/**
* 清单运费推送
*/
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/controller/refund/OrderRefundCallbackController.java
0 → 100644
View file @
d7a65568
package
com
.
liquidnet
.
service
.
platform
.
controller
.
refund
;
import
com.liquidnet.service.kylin.dto.param.RefundCallbackParam
;
import
com.liquidnet.service.platform.service.refund.OrderRefundsCallbackServiceImpl
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* <p>
* 退款回掉
* </p>
*
* @author jiangxiulong
* @since 2021-06-11 6:10 下午
*/
@Api
(
tags
=
"前端-退款回调"
)
@RestController
@RequestMapping
(
"refund"
)
public
class
OrderRefundCallbackController
{
@Autowired
private
OrderRefundsCallbackServiceImpl
orderRefundsCallbackServiceImpl
;
@PostMapping
(
"apply"
)
@ApiOperation
(
"超时退款"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"body"
,
dataType
=
"String"
,
name
=
"orderTicketsId"
,
value
=
"订单ID"
,
required
=
true
),
})
public
Boolean
refundApply
(
@RequestParam
()
String
orderTicketsId
)
{
try
{
Boolean
res
=
orderRefundsCallbackServiceImpl
.
refundApply
(
orderTicketsId
);
if
(
res
)
{
return
true
;
}
else
{
return
false
;
}
}
catch
(
Exception
e
)
{
return
false
;
}
}
@PostMapping
(
"callback"
)
@ApiOperation
(
"退款回调"
)
public
String
refundCallback
(
RefundCallbackParam
refundCallbackParam
)
{
String
result
=
orderRefundsCallbackServiceImpl
.
refundCallback
(
refundCallbackParam
);
return
result
;
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/service/express/shunfeng/PerformancesExpressCallbackServiceImpl.java
0 → 100644
View file @
d7a65568
package
com
.
liquidnet
.
service
.
platform
.
service
.
express
.
shunfeng
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.liquidnet.commons.lang.util.*
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.kylin.constant.KylinTableStatusConst
;
import
com.liquidnet.service.kylin.dto.param.PerformanceExpressSearchAdminParam
;
import
com.liquidnet.service.kylin.entity.KylinOrderExpress
;
import
com.liquidnet.service.kylin.entity.KylinOrderTickets
;
import
com.liquidnet.service.kylin.mapper.*
;
import
com.liquidnet.service.kylin.service.IKylinOrderExpress
;
import
com.liquidnet.service.platform.utils.ShunfengSignUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.mongodb.core.MongoTemplate
;
import
org.springframework.stereotype.Service
;
import
java.util.HashMap
;
import
java.util.List
;
/**
* <p>
* 演出 服务实现类
* </p>
*
* @author liquidnet
* @since 2021-05-05
*/
@Service
@Slf4j
public
class
PerformancesExpressCallbackServiceImpl
extends
ServiceImpl
<
KylinOrderExpressMapper
,
KylinOrderExpress
>
implements
IKylinOrderExpress
{
@Value
(
"${liquidnet.shunfeng.custid}"
)
private
String
custid
;
@Value
(
"${liquidnet.shunfeng.jCompany}"
)
private
String
jCompany
;
@Value
(
"${liquidnet.shunfeng.jContact}"
)
private
String
jContact
;
@Value
(
"${liquidnet.shunfeng.jTel}"
)
private
String
jTel
;
@Value
(
"${liquidnet.shunfeng.jProvince}"
)
private
String
jProvince
;
@Value
(
"${liquidnet.shunfeng.jCity}"
)
private
String
jCity
;
@Value
(
"${liquidnet.shunfeng.jAddress}"
)
private
String
jAddress
;
@Value
(
"${liquidnet.shunfeng.expressType}"
)
private
Integer
expressType
;
@Value
(
"${liquidnet.shunfeng.depositumInfo}"
)
private
String
depositumInfo
;
@Autowired
MongoTemplate
mongoTemplate
;
@Autowired
private
ShunfengSignUtils
shunfengSignUtils
;
@Autowired
private
KylinPerformancesMapper
performancesMapper
;
@Autowired
private
KylinOrderTicketsMapper
kylinOrderTicketsMapper
;
@Autowired
private
KylinOrderExpressMapper
kylinOrderExpressMapper
;
@Autowired
private
KylinOrderExpressFeeInfoMapper
kylinOrderExpressFeeInfoMapper
;
public
ResponseDto
getFreight
(
PerformanceExpressSearchAdminParam
performanceExpressSearchAdminParam
)
{
List
<
String
>
ids
=
performanceExpressSearchAdminParam
.
getIds
();
Integer
[]
expressStatus
=
{
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS1
,
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS3
};
for
(
String
orderTicketsId
:
ids
)
{
KylinOrderExpress
orderExpressInfo
=
kylinOrderExpressMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderExpress
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
.
notIn
(
"express_status"
,
expressStatus
)
);
KylinOrderTickets
orderInfo
=
kylinOrderTicketsMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderTickets
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
);
if
(
null
!=
orderExpressInfo
)
{
HashMap
<
String
,
Object
>
hBody
=
new
HashMap
<>();
hBody
.
put
(
"jProvince"
,
jProvince
);
hBody
.
put
(
"jCity"
,
jCity
);
hBody
.
put
(
"jAddress"
,
jAddress
);
hBody
.
put
(
"dProvince"
,
"北京市"
);
hBody
.
put
(
"dCity"
,
"北京城区"
);
hBody
.
put
(
"dAddress"
,
orderInfo
.
getExpressAddress
());
hBody
.
put
(
"expressType"
,
expressType
);
// hBody.put("parcelWeighs", 2.00);
// hBody.put("volume", "10,10,20");
// 生成签名并请求
String
result
=
shunfengSignUtils
.
generateSignatureAndRequest
(
hBody
,
"/public/order/v1/getFreight"
);
HashMap
hashMap
=
JsonUtils
.
fromJson
(
result
,
HashMap
.
class
);
System
.
out
.
println
(
result
);
if
(
hashMap
.
get
(
"succ"
).
equals
(
"fail"
))
{
String
msg
=
(
String
)
hashMap
.
get
(
"msg"
);
return
ResponseDto
.
failure
(
msg
);
}
else
{
/*HashMap resultResult = (HashMap) hashMap.get("result");
List<HashMap> feeList = (List) resultResult.get("feeList");
if (!CollectionUtil.isEmpty(feeList)) {
for (HashMap feeInfo : feeList) {
KylinOrderExpressFeeInfo kylinOrderExpressFeeInfo = new KylinOrderExpressFeeInfo();
String orderExpressFeeInfoId = IDGenerator.nextSnowId();
kylinOrderExpressFeeInfo.setOrderExpressFeeInfoId(orderExpressFeeInfoId);
kylinOrderExpressFeeInfo.setOrderExpressId(orderExpressInfo.getOrderExpressId());
kylinOrderExpressFeeInfo.setType((String) feeInfo.get("type"));
kylinOrderExpressFeeInfo.setName((String) feeInfo.get("name"));
kylinOrderExpressFeeInfo.setValue(new BigDecimal(feeInfo.get("value").toString()));
kylinOrderExpressFeeInfo.setCreatedAt(DateUtil.getNowTime());
kylinOrderExpressFeeInfoMapper.insert(kylinOrderExpressFeeInfo);
}
}*/
}
}
}
return
ResponseDto
.
success
();
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/service/refund/KylinRefundsStatusServiceImpl.java
0 → 100644
View file @
d7a65568
This diff is collapsed.
Click to expand it.
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/service/refund/OrderRefundsCallbackServiceImpl.java
0 → 100644
View file @
d7a65568
package
com
.
liquidnet
.
service
.
platform
.
service
.
refund
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.liquidnet.service.kylin.constant.KylinTableStatusConst
;
import
com.liquidnet.service.kylin.dao.KylinOrderTicketEntitiesDao
;
import
com.liquidnet.service.kylin.dto.param.RefundCallbackParam
;
import
com.liquidnet.service.kylin.entity.KylinOrderRefunds
;
import
com.liquidnet.service.kylin.entity.KylinOrderTicketEntities
;
import
com.liquidnet.service.kylin.entity.KylinOrderTicketRelations
;
import
com.liquidnet.service.kylin.entity.KylinOrderTickets
;
import
com.liquidnet.service.kylin.mapper.*
;
import
com.liquidnet.service.kylin.service.IKylinOrderRefundsService
;
import
com.liquidnet.service.platform.utils.DataUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.core.MongoTemplate
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* <p>
* 订单退款表 服务实现类 处理逻辑判断
* </p>
*
* @author jiangxiulong
* @since 2021-05-26
*/
@Slf4j
@Service
public
class
OrderRefundsCallbackServiceImpl
extends
ServiceImpl
<
KylinOrderRefundsMapper
,
KylinOrderRefunds
>
implements
IKylinOrderRefundsService
{
@Autowired
private
KylinRefundsStatusServiceImpl
kylinRefundsStatusServiceImpl
;
@Autowired
private
KylinOrderRefundsMapper
kylinOrderRefundsMapper
;
@Autowired
private
KylinOrderTicketsMapper
kylinOrderTicketsMapper
;
@Autowired
private
KylinOrderTicketEntitiesMapper
kylinOrderTicketEntitiesMapper
;
@Autowired
private
KylinOrderTicketRelationsMapper
kylinOrderTicketRelationsMapper
;
@Autowired
MongoTemplate
mongoTemplate
;
@Autowired
private
DataUtils
dataUtils
;
public
String
refundCallback
(
RefundCallbackParam
refundCallbackParam
)
{
KylinOrderRefunds
refundInfo
=
kylinOrderRefundsMapper
.
selectOne
(
new
UpdateWrapper
<
KylinOrderRefunds
>()
.
eq
(
"order_refund_code"
,
refundCallbackParam
.
getOrder_refund_code
())
);
if
(
refundInfo
==
null
)
{
log
.
info
(
"Failed:{}.RefundController refundCallback: 退款订单查询失败,编号{}"
,
"KylinOrderRefundsServiceImplRefundCallback"
,
refundCallbackParam
.
getOrder_refund_code
());
return
"fail"
;
}
if
(
refundInfo
.
getStatus
()
==
KylinTableStatusConst
.
ORDER_REFUND_STATUS_CANCEL
)
{
log
.
info
(
"Failed:{}.RefundController refundCallback: 退款订单已取消,编号{}"
,
"KylinOrderRefundsServiceImplRefundCallback"
,
refundCallbackParam
.
getOrder_refund_code
());
return
"fail"
;
}
if
(
refundInfo
.
getStatus
()
==
KylinTableStatusConst
.
ORDER_REFUND_STATUS_REFUNDED
)
{
log
.
info
(
"Failed:{}.RefundController refundCallback: 退款订单已退款,编号{}"
,
"KylinOrderRefundsServiceImplRefundCallback"
,
refundCallbackParam
.
getOrder_refund_code
());
return
"success"
;
}
Integer
status
=
refundCallbackParam
.
getStatus
();
if
(
1
==
status
)
{
// 退款成功
boolean
res
=
kylinRefundsStatusServiceImpl
.
orderTicketRefunded
(
refundCallbackParam
,
refundInfo
);
if
(
res
)
{
return
"success"
;
}
else
{
return
"fail"
;
}
}
if
(
0
==
status
)
{
// 退款失败
KylinOrderRefunds
kylinOrderRefunds
=
new
KylinOrderRefunds
();
kylinOrderRefunds
.
setStatus
(
KylinTableStatusConst
.
ORDER_REFUND_STATUS_ERROR
);
kylinOrderRefunds
.
setRefundCode
(
refundCallbackParam
.
getRefund_code
());
kylinOrderRefunds
.
setRefundType
(
refundCallbackParam
.
getRefund_type
());
kylinOrderRefunds
.
setRefundId
(
refundCallbackParam
.
getRefund_id
());
kylinOrderRefunds
.
setRefundAt
(
refundCallbackParam
.
getRefund_at
());
kylinOrderRefunds
.
setRefundError
(
refundCallbackParam
.
getRefund_error
());
kylinOrderRefunds
.
setUpdatedAt
(
LocalDateTime
.
now
());
kylinOrderRefundsMapper
.
update
(
kylinOrderRefunds
,
new
UpdateWrapper
<
KylinOrderRefunds
>().
eq
(
"order_refund_code"
,
refundCallbackParam
.
getOrder_refund_code
())
);
}
return
"success"
;
}
public
Boolean
refundApply
(
String
orderTicketsId
)
{
KylinOrderTickets
orderInfo
=
kylinOrderTicketsMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderTickets
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
);
KylinOrderTicketRelations
orderRelations
=
kylinOrderTicketRelationsMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderTicketRelations
>().
eq
(
"order_id"
,
orderTicketsId
)
);
// 传的快递费不能大于实际的快递费=(支付的快递费-已退的快递费)
Double
refundPriceExpressSum
=
kylinOrderRefundsMapper
.
RefundPriceExpressSum
(
// 已退快递费
orderTicketsId
,
KylinTableStatusConst
.
ORDER_REFUND_STATUS_CANCEL
);
if
(
null
==
refundPriceExpressSum
)
{
refundPriceExpressSum
=
0.0
;
}
Double
RefundPriceExpress
=
orderInfo
.
getPriceExpress
().
doubleValue
()
-
refundPriceExpressSum
;
// 查询订单入场人
List
<
KylinOrderTicketEntitiesDao
>
entitiesListTemp
=
kylinOrderTicketEntitiesMapper
.
getOvertimeRefundEntitiesList
(
orderTicketsId
);
List
<
KylinOrderTicketEntitiesDao
>
entitiesList
=
new
ArrayList
<>();
if
(
entitiesListTemp
.
size
()
>
0
)
{
double
priceActual
=
orderInfo
.
getPriceActual
().
doubleValue
();
double
priceExpress
=
orderInfo
.
getPriceExpress
().
doubleValue
();
int
allEntitiesCount
=
kylinOrderTicketEntitiesMapper
.
selectCount
(
// 总入场人数量 排出未付款的 用来计算单入场人的价格
new
QueryWrapper
<
KylinOrderTicketEntities
>()
.
eq
(
"order_id"
,
orderInfo
.
getOrderTicketsId
())
// .ne("is_payment", KylinTableStatusConst.ENTITIES_IS_PAYMENT0)
);
double
onePrice
=
(
priceActual
-
priceExpress
)
/
allEntitiesCount
;
//单价
for
(
KylinOrderTicketEntitiesDao
entities
:
entitiesListTemp
)
{
Double
refundedPrice
=
kylinOrderTicketEntitiesMapper
.
getRefundEntitiesPrice
(
//已退 包含退款中
orderInfo
.
getOrderTicketsId
(),
KylinTableStatusConst
.
ORDER_REFUND_STATUS_CANCEL
,
entities
.
getOrderTicketEntitiesId
()
);
double
canRefundedPrice
;
if
(
null
!=
refundedPrice
)
{
canRefundedPrice
=
onePrice
-
refundedPrice
;
}
else
{
canRefundedPrice
=
onePrice
;
}
entities
.
setCanRefundedPrice
(
BigDecimal
.
valueOf
(
canRefundedPrice
));
if
(
canRefundedPrice
>
0
)
{
// 退款中但是可退款金额为0不展示
entitiesList
.
add
(
entities
);
}
}
}
List
<
String
>
ticketEntityIds
=
entitiesList
.
stream
().
map
(
KylinOrderTicketEntities
->
KylinOrderTicketEntities
.
getOrderTicketEntitiesId
()).
collect
(
Collectors
.
toList
());
List
<
Double
>
entitiesPrice
=
entitiesList
.
stream
().
map
(
KylinOrderTicketEntities
->
KylinOrderTicketEntities
.
getCanRefundedPrice
().
doubleValue
()).
collect
(
Collectors
.
toList
());
boolean
res
=
kylinRefundsStatusServiceImpl
.
orderTicketRefunding
(
orderInfo
,
orderTicketsId
,
RefundPriceExpress
,
ticketEntityIds
,
entitiesPrice
);
if
(
res
)
{
// 超时直接退还库存
for
(
String
entitiesId
:
ticketEntityIds
)
{
KylinOrderTicketEntities
entitiesInfo
=
kylinOrderTicketEntitiesMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderTicketEntities
>().
eq
(
"order_ticket_entities_id"
,
entitiesId
)
);
if
(
entitiesInfo
.
getIsPayment
()
==
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT3
)
{
dataUtils
.
changeSurplusGeneral
(
entitiesInfo
.
getTicketId
(),
1
);
dataUtils
.
changeBuyInfo
(
orderInfo
.
getUserId
(),
entitiesInfo
.
getEnterIdCode
(),
orderRelations
.
getPerformanceId
(),
entitiesInfo
.
getTicketId
(),
-
1
);
}
}
return
true
;
}
else
{
return
false
;
}
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/utils/ShunfengSignUtils.java
0 → 100644
View file @
d7a65568
package
com
.
liquidnet
.
service
.
platform
.
utils
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.base.UserPathDto
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.codec.binary.Base64
;
import
org.apache.commons.codec.digest.DigestUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.http.HttpEntity
;
import
org.apache.http.client.methods.CloseableHttpResponse
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.entity.StringEntity
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.HttpClients
;
import
org.apache.http.util.EntityUtils
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.IOException
;
import
java.util.HashMap
;
/**
* <p>
* 顺丰
* </p>
*
* @author jiangxiulong
* @since 2021-06-24 8:00 下午
*/
@Component
@Slf4j
public
class
ShunfengSignUtils
{
/**
* appId
*/
@Value
(
"${liquidnet.shunfeng.appid}"
)
private
String
APP_ID
;
/**
* sk
*/
@Value
(
"${liquidnet.shunfeng.sk}"
)
private
String
SK
;
/**
* url
*/
@Value
(
"${liquidnet.shunfeng.url}"
)
private
String
URL
;
/**
* 签名有效期(可根据实际业务设定)单位:毫秒
*/
private
final
static
Long
CHECK_TIME
=
600000L
;
/**
* 生成签名并请求
* @param hbody 请求body
* @return
*/
public
String
generateSignatureAndRequest
(
HashMap
<
String
,
Object
>
hbody
,
String
url
)
{
long
currentTimeMillis
=
System
.
currentTimeMillis
();
// 时间戳
String
timestamp
=
currentTimeMillis
+
""
;
hbody
.
put
(
"companyId"
,
APP_ID
);
String
body
=
JsonUtils
.
toJson
(
hbody
);
// 生成签名
String
sign
=
genSign
(
timestamp
,
body
);
CloseableHttpClient
client
=
HttpClients
.
createDefault
();
// 请求下单地址
HttpPost
httpPost
=
new
HttpPost
(
URL
+
url
);
// sendAppId(sendAppId需赋值appId)
httpPost
.
addHeader
(
"sendAppId"
,
APP_ID
);
// 时间戳需和获取验签时一致!!!
httpPost
.
addHeader
(
"timestamp"
,
timestamp
);
// 签名
httpPost
.
addHeader
(
"sign"
,
sign
);
httpPost
.
addHeader
(
"Content-Type"
,
"application/json;charset=utf-8"
);
httpPost
.
addHeader
(
"Accept"
,
"application/json"
);
// 请求body体需和获取验签时一致且编码UTF8!!!
httpPost
.
setEntity
(
new
StringEntity
(
body
,
"utf-8"
));
CloseableHttpResponse
response
=
null
;
log
.
info
(
UserPathDto
.
setData
(
"header"
,
""
,
httpPost
.
getAllHeaders
()));
log
.
info
(
UserPathDto
.
setData
(
"body"
,
""
,
body
));
try
{
response
=
client
.
execute
(
httpPost
);
if
(
response
.
getStatusLine
().
getStatusCode
()
==
200
)
{
System
.
out
.
println
(
"发送请求成功"
);
HttpEntity
entity
=
response
.
getEntity
();
// 发送响应且编码UTF8!!!
return
EntityUtils
.
toString
(
entity
,
"utf-8"
);
}
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"发送请求失败"
);
e
.
printStackTrace
();
}
finally
{
if
(
client
!=
null
)
{
try
{
client
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
if
(
response
!=
null
)
{
try
{
response
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
return
null
;
}
/**
* 生成签名
* @param timestamp 时间戳
* @param body 请求body
* @return
*/
private
String
genSign
(
String
timestamp
,
String
body
)
{
if
(
StringUtils
.
isEmpty
(
body
))
{
body
=
""
;
}
StringBuffer
sb
=
new
StringBuffer
();
sb
.
append
(
body
);
sb
.
append
(
"&sk="
).
append
(
SK
);
sb
.
append
(
"×tamp="
).
append
(
timestamp
);
byte
[]
bytes
=
DigestUtils
.
sha512
(
sb
.
toString
());
return
Base64
.
encodeBase64URLSafeString
(
bytes
);
}
/**
* 接收请求且验签(可在控制层调用此方法)
* @param params 接收请求参数
* @param request 接收请求
* @return
*/
public
boolean
receiveRequestAndCheckSign
(
String
params
,
HttpServletRequest
request
)
{
// 请求方APPID
String
sendAppId
=
request
.
getHeader
(
"sendAppId"
);
// 请求方时间戳
String
timestamp
=
request
.
getHeader
(
"timestamp"
);
// 请求方签名
String
sign
=
request
.
getHeader
(
"sign"
);
if
(
StringUtils
.
isBlank
(
sendAppId
))
{
System
.
out
.
println
(
"参数sendAppId不能为空"
);
return
false
;
}
if
(
StringUtils
.
isBlank
(
timestamp
))
{
System
.
out
.
println
(
"参数timestamp不能为空"
);
return
false
;
}
if
(
StringUtils
.
isBlank
(
sign
))
{
System
.
out
.
println
(
"参数sign不能为空"
);
return
false
;
}
// 校验签名是否过期
long
requestTime
=
Long
.
parseLong
(
timestamp
);
long
now
=
System
.
currentTimeMillis
();
if
(
Math
.
abs
(
now
-
requestTime
)
>
CHECK_TIME
)
{
System
.
out
.
println
(
"签名过期!"
);
return
false
;
}
// 请求方参数+请求方时间戳+SK 生成签名
String
thisSign
=
genSign
(
timestamp
,
params
);
// 获取的签名和请求方签名比较是否一致
if
(!
thisSign
.
equals
(
sign
))
{
System
.
out
.
println
(
"签名错误"
);
return
false
;
}
return
true
;
}
}
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