Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
customer-service
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
QG
customer-service
Commits
3eca0503
Commit
3eca0503
authored
Mar 21, 2020
by
杨钧
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
订单信息查询接口
parent
cbb4062e
Changes
14
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
627 additions
and
21 deletions
+627
-21
OrderStatusEnums.java
...n/java/cn/quantgroup/customer/enums/OrderStatusEnums.java
+60
-0
CallbackRecord.java
...va/cn/quantgroup/customer/model/order/CallbackRecord.java
+67
-0
OrderInfo.java
...in/java/cn/quantgroup/customer/model/order/OrderInfo.java
+25
-0
OrderInfoVo.java
.../java/cn/quantgroup/customer/model/order/OrderInfoVo.java
+23
-0
OrderStatus.java
.../java/cn/quantgroup/customer/model/order/OrderStatus.java
+22
-0
OrderStatusXyqb.java
...a/cn/quantgroup/customer/model/order/OrderStatusXyqb.java
+11
-0
OrderRest.java
src/main/java/cn/quantgroup/customer/rest/OrderRest.java
+15
-4
IKaService.java
src/main/java/cn/quantgroup/customer/service/IKaService.java
+9
-0
IOrderService.java
...in/java/cn/quantgroup/customer/service/IOrderService.java
+8
-0
IXyqbService.java
...ain/java/cn/quantgroup/customer/service/IXyqbService.java
+9
-4
KaServiceImpl.java
...va/cn/quantgroup/customer/service/impl/KaServiceImpl.java
+45
-2
OrderServiceImpl.java
...cn/quantgroup/customer/service/impl/OrderServiceImpl.java
+190
-6
XyqbServiceImpl.java
.../cn/quantgroup/customer/service/impl/XyqbServiceImpl.java
+41
-5
SignUtil.java
src/main/java/cn/quantgroup/customer/util/SignUtil.java
+102
-0
No files found.
src/main/java/cn/quantgroup/customer/enums/OrderStatusEnums.java
0 → 100644
View file @
3eca0503
package
cn
.
quantgroup
.
customer
.
enums
;
import
java.util.Arrays
;
import
java.util.Optional
;
/**
* Created by Administrator on 2019/12/17.
*/
public
enum
OrderStatusEnums
{
CREDIT_SUCC
(
"CREDIT_SUCC"
,
"授信成功"
),
APPROVE_ING
(
"APPROVE_ING"
,
"审批中"
),
FUAD_ASSIFN_SUCC
(
"FUAD_ASSIFN_SUCC"
,
"分配资金方成功"
),
REJECT
(
"REJECT"
,
"风控审核不通过"
),
WITHDRAW
(
"WITHDRAW"
,
"用户提现申请成功"
),
WITHDRAW_APPROVING
(
"WITHDRAW_APPROVING"
,
"提现审批中"
),
// 对应loan状态50等待二次审核
PAY_ING
(
"PAY_ING"
,
"放款中"
),
FUND_SUCC
(
"FUND_SUCC"
,
"放款成功"
),
FUND_WAITING_WITHDRAW
(
"FUND_WAITING_WITHDRAW"
,
"放款成功,等待二次提现"
),
FUND_WITHDRAW_SUCC
(
"FUND_WITHDRAW_SUCC"
,
"放款提现成功,存管提现成功"
),
FUND_FAIL
(
"FUND_FAIL"
,
"放款失败"
),
ALL_REPAID
(
"ALL_REPAID"
,
"结清"
),
CANCEL_LOAN
(
"CANCEL_LOAN"
,
"贷前关闭订单"
),
CANCEL_AFTER_LOAN
(
"CANCEL_AFTER_LOAN"
,
"贷后关闭订单"
);
private
String
key
;
private
String
value
;
OrderStatusEnums
(
String
key
,
String
value
)
{
this
.
key
=
key
;
this
.
value
=
value
;
}
public
String
getKey
()
{
return
key
;
}
public
String
getValue
()
{
return
value
;
}
public
static
String
getValue
(
String
key
){
Optional
<
OrderStatusEnums
>
optional
=
Arrays
.
asList
(
OrderStatusEnums
.
values
()).
stream
().
filter
(
coreStatus
->
key
.
equalsIgnoreCase
(
coreStatus
.
getKey
())).
findFirst
();
if
(
optional
.
isPresent
()){
return
optional
.
get
().
getValue
();
}
return
OrderStatusEnums
.
APPROVE_ING
.
getValue
();
}
public
static
boolean
finalStatus
(
OrderStatusEnums
enums
)
{
switch
(
enums
)
{
case
REJECT:
case
FUND_FAIL:
case
ALL_REPAID:
case
CANCEL_LOAN:
case
CANCEL_AFTER_LOAN:
return
true
;
default
:
return
false
;
}
}
}
src/main/java/cn/quantgroup/customer/model/order/CallbackRecord.java
0 → 100644
View file @
3eca0503
package
cn
.
quantgroup
.
customer
.
model
.
order
;
import
lombok.Data
;
import
org.apache.commons.lang3.StringUtils
;
import
java.util.Objects
;
/**
* @author yangjun
* @Date 2020/3/20 14:13
* @Desc
* @Update
*/
@Data
public
class
CallbackRecord
{
/**
* 通知类型
*/
private
String
noticeType
;
/**
* 通知成功或者失败
*/
private
String
noticeStatus
;
/**
* 期数
*/
private
Long
termNo
;
/**
* 通知时间
*/
private
Long
dateTime
;
/**
* 通知时间 YYYY-MM-dd HH:mm:ss
*/
private
String
createAt
;
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
this
==
obj
)
{
return
true
;
}
if
(
Objects
.
isNull
(
obj
))
{
return
false
;
}
if
(
getClass
()
!=
obj
.
getClass
())
{
return
false
;
}
CallbackRecord
other
=
(
CallbackRecord
)
obj
;
if
(
StringUtils
.
isBlank
(
other
.
getNoticeType
()))
{
return
false
;
}
else
{
if
(!
this
.
getNoticeType
().
equals
(
other
.
getNoticeType
())){
return
false
;
}
else
{
if
(
Objects
.
isNull
(
other
.
getTermNo
())){
return
true
;
}
else
{
if
(!
this
.
getTermNo
().
equals
(
other
.
getTermNo
())){
return
false
;
}
return
true
;
}
}
}
}
}
src/main/java/cn/quantgroup/customer/model/order/OrderInfo.java
0 → 100644
View file @
3eca0503
package
cn
.
quantgroup
.
customer
.
model
.
order
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @author Jony
* @Date 2020/3/20 16:28
* @Desc
* @Update
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public
class
OrderInfo
{
private
String
channelOrderNo
;
private
Long
channelId
;
private
String
status
;
private
String
remark
;
private
String
applyNo
;
private
Long
loanId
;
}
src/main/java/cn/quantgroup/customer/model/order/OrderInfoVo.java
0 → 100644
View file @
3eca0503
package
cn
.
quantgroup
.
customer
.
model
.
order
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.List
;
/**
* @author yangjun
* @Date 2020/3/20 16:27
* @Desc
* @Update
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public
class
OrderInfoVo
{
private
List
<
CallbackRecord
>
noticeList
;
private
OrderInfo
orderInfo
;
}
src/main/java/cn/quantgroup/customer/model/order/OrderStatus.java
0 → 100644
View file @
3eca0503
package
cn
.
quantgroup
.
customer
.
model
.
order
;
import
cn.quantgroup.customer.enums.OrderStatusEnums
;
import
lombok.Data
;
/**
* @author yangjun
* @Date 2020/3/20 13:52
* @Desc
* @Update
*/
@Data
public
class
OrderStatus
{
/**
* 订单状态
*/
private
OrderStatusEnums
status
;
/**
* 状态更新时间
*/
private
Long
updateTime
;
}
src/main/java/cn/quantgroup/customer/model/order/OrderStatusXyqb.java
0 → 100644
View file @
3eca0503
package
cn
.
quantgroup
.
customer
.
model
.
order
;
import
lombok.Data
;
@Data
public
class
OrderStatusXyqb
{
private
OrderStatus
currentStatus
;
}
src/main/java/cn/quantgroup/customer/rest/OrderRest.java
View file @
3eca0503
package
cn
.
quantgroup
.
customer
.
rest
;
import
cn.quantgroup.customer.rest.param.ordermapping.OrderQueryParam
;
import
cn.quantgroup.customer.rest.param.repay.RepayOrderInfoQuery
;
import
cn.quantgroup.customer.rest.vo.JsonResult
;
import
cn.quantgroup.customer.service.IOrderService
;
import
cn.quantgroup.customer.service.IXyqbService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.Valid
;
/**
* @author Wang Xiangwei
...
...
@@ -35,4 +36,14 @@ public class OrderRest {
return
orderService
.
findFlowChart
(
orderNo
);
}
/**
* 订单信息查询
* @param orderQuery
* @return
*/
@GetMapping
(
"/info"
)
public
JsonResult
queryRepayInfo
(
OrderQueryParam
orderQuery
)
{
log
.
info
(
"[查询订单信息],请求参数:orderQuery={}"
,
orderQuery
);
return
orderService
.
queryOrderInfo
(
orderQuery
);
}
}
src/main/java/cn/quantgroup/customer/service/IKaService.java
View file @
3eca0503
...
...
@@ -2,6 +2,7 @@ package cn.quantgroup.customer.service;
import
cn.quantgroup.customer.model.kaordermapping.ChannelConfigurationResult
;
import
cn.quantgroup.customer.model.kaordermapping.LoanOrderMapping
;
import
cn.quantgroup.customer.model.order.CallbackRecord
;
import
cn.quantgroup.customer.rest.param.ordermapping.OrderQueryParam
;
import
cn.quantgroup.customer.rest.vo.JsonResult
;
...
...
@@ -26,4 +27,12 @@ public interface IKaService {
JsonResult
<
List
<
ChannelConfigurationResult
>>
getAllChannelConfiguration
();
/**
* 查询发送通知记录
* @param applyNo 申请单号
* @param channelId 渠道号
* @param aTrue true 成功 false 失败
* @return
*/
JsonResult
<
List
<
CallbackRecord
>>
querySendRecords
(
String
applyNo
,
Long
channelId
,
Boolean
aTrue
);
}
src/main/java/cn/quantgroup/customer/service/IOrderService.java
View file @
3eca0503
...
...
@@ -2,6 +2,7 @@ package cn.quantgroup.customer.service;
import
cn.quantgroup.customer.model.order.FlowNode
;
import
cn.quantgroup.customer.model.order.LoanOrderDetail
;
import
cn.quantgroup.customer.rest.param.ordermapping.OrderQueryParam
;
import
cn.quantgroup.customer.rest.vo.JsonResult
;
import
java.util.List
;
...
...
@@ -21,4 +22,11 @@ public interface IOrderService{
JsonResult
<
LoanOrderDetail
>
getLoanOrderDetail
(
Long
loanId
);
/**
* 查询订单信息
* @param orderQuery
* @return
*/
JsonResult
queryOrderInfo
(
OrderQueryParam
orderQuery
);
}
src/main/java/cn/quantgroup/customer/service/IXyqbService.java
View file @
3eca0503
package
cn
.
quantgroup
.
customer
.
service
;
import
cn.quantgroup.customer.model.order.ApplyOrder
;
import
cn.quantgroup.customer.model.order.FlowNode
;
import
cn.quantgroup.customer.model.order.LoanOrder
;
import
cn.quantgroup.customer.model.order.OrderRepayment
;
import
cn.quantgroup.customer.model.order.*
;
import
cn.quantgroup.customer.rest.param.card.ModifyReservePhone
;
import
cn.quantgroup.customer.rest.param.card.UnBindCardModel
;
import
cn.quantgroup.customer.rest.param.applyorder.ApplyOrderQuery
;
import
cn.quantgroup.customer.rest.param.ordermapping.OrderQueryParam
;
import
cn.quantgroup.customer.rest.param.repay.RepayOrderInfoQuery
;
import
cn.quantgroup.customer.rest.param.repay.RepayOrderQuery
;
import
cn.quantgroup.customer.rest.vo.JsonResult
;
...
...
@@ -57,4 +55,11 @@ public interface IXyqbService {
String
queryRepayInfo
(
RepayOrderInfoQuery
repayOrderQuery
);
String
queryRepayOptRecords
(
String
businessFlowNo
);
/**
* 订单状态查询
* @param orderQuery
* @return
*/
JsonResult
<
OrderStatus
>
orderStatusQuery
(
OrderQueryParam
orderQuery
);
}
src/main/java/cn/quantgroup/customer/service/impl/KaServiceImpl.java
View file @
3eca0503
...
...
@@ -4,6 +4,7 @@ import cn.quantgroup.customer.enums.ErrorCodeEnum;
import
cn.quantgroup.customer.exception.BusinessException
;
import
cn.quantgroup.customer.model.kaordermapping.ChannelConfigurationResult
;
import
cn.quantgroup.customer.model.kaordermapping.LoanOrderMapping
;
import
cn.quantgroup.customer.model.order.CallbackRecord
;
import
cn.quantgroup.customer.rest.param.ordermapping.OrderQueryParam
;
import
cn.quantgroup.customer.rest.vo.JsonResult
;
import
cn.quantgroup.customer.service.IKaService
;
...
...
@@ -33,7 +34,7 @@ import java.util.StringJoiner;
public
class
KaServiceImpl
implements
IKaService
{
@Value
(
"
${qapi.http}
"
)
@Value
(
"
http://localhost:7037
"
)
private
String
kaSysUrl
;
@Autowired
...
...
@@ -138,7 +139,7 @@ public class KaServiceImpl implements IKaService {
log
.
info
(
"{},获得所有渠道"
,
logPre
);
String
url
=
kaSysUrl
+
"/external/
/
query/all/channelConfiguration"
;
String
url
=
kaSysUrl
+
"/external/query/all/channelConfiguration"
;
String
result
;
...
...
@@ -158,4 +159,46 @@ public class KaServiceImpl implements IKaService {
JsonResult
<
List
<
ChannelConfigurationResult
>>
jsonResult
=
JSONTools
.
deserialize
(
result
,
typeToken
);
return
jsonResult
;
}
@Override
public
JsonResult
<
List
<
CallbackRecord
>>
querySendRecords
(
String
applyNo
,
Long
channelId
,
Boolean
isSucc
)
{
String
logPre
=
"[KaServiceImpl.querySendRecords] 查询发送通知记录"
;
log
.
info
(
"{}, applyNo={},channelId={},isSucc={}"
,
logPre
,
applyNo
,
channelId
,
isSucc
);
String
url
=
kaSysUrl
+
"/external/query/orderCallBack"
;
try
{
Map
<
String
,
Object
>
param
=
Maps
.
newHashMap
();
if
(
Objects
.
nonNull
(
applyNo
))
{
param
.
put
(
"applyNo"
,
applyNo
);
}
if
(
Objects
.
nonNull
(
channelId
))
{
param
.
put
(
"channelId"
,
String
.
valueOf
(
channelId
));
}
param
.
put
(
"isSucc"
,
isSucc
);
String
result
=
null
;
try
{
result
=
httpService
.
get
(
url
,
param
);
}
catch
(
Exception
e
)
{
log
.
error
(
" {} http请求异常 url={},param={}"
,
logPre
,
url
,
param
,
e
);
return
JsonResult
.
buildErrorStateResult
(
"通讯异常"
,
null
);
}
log
.
info
(
"{} 请求ka系统返回值:{}"
,
logPre
,
result
);
if
(
StringUtils
.
isBlank
(
result
))
{
log
.
error
(
"{} 返回结果为空,查询失败 jsonResult={}"
,
logPre
,
result
);
return
JsonResult
.
buildErrorStateResult
(
"查询数据异常"
,
null
);
}
TypeReference
<
JsonResult
<
List
<
CallbackRecord
>>>
typeToken
=
new
TypeReference
<
JsonResult
<
List
<
CallbackRecord
>>>()
{
};
JsonResult
<
List
<
CallbackRecord
>>
jsonResult
=
JSONTools
.
deserialize
(
result
,
typeToken
);
return
jsonResult
;
}
catch
(
Exception
e
)
{
log
.
error
(
"{} 网络通讯异常,applyNo={},channelId={},isSucc={},ex:{}"
,
applyNo
,
channelId
,
isSucc
,
ExceptionUtils
.
getStackTrace
(
e
));
throw
new
BusinessException
(
ErrorCodeEnum
.
NET_ERROR
);
}
}
}
src/main/java/cn/quantgroup/customer/service/impl/OrderServiceImpl.java
View file @
3eca0503
This diff is collapsed.
Click to expand it.
src/main/java/cn/quantgroup/customer/service/impl/XyqbServiceImpl.java
View file @
3eca0503
package
cn
.
quantgroup
.
customer
.
service
.
impl
;
import
cn.quantgroup.customer.model.order.ApplyOrder
;
import
cn.quantgroup.customer.model.order.FlowNode
;
import
cn.quantgroup.customer.model.order.LoanOrder
;
import
cn.quantgroup.customer.model.order.OrderRepayment
;
import
cn.quantgroup.customer.enums.ErrorCodeEnum
;
import
cn.quantgroup.customer.model.order.*
;
import
cn.quantgroup.customer.rest.param.applyorder.ApplyOrderQuery
;
import
cn.quantgroup.customer.rest.param.card.ModifyReservePhone
;
import
cn.quantgroup.customer.rest.param.card.UnBindCardModel
;
import
cn.quantgroup.customer.rest.param.ordermapping.OrderQueryParam
;
import
cn.quantgroup.customer.rest.param.repay.RepayOrderInfoQuery
;
import
cn.quantgroup.customer.rest.param.repay.RepayOrderQuery
;
import
cn.quantgroup.customer.rest.vo.JsonResult
;
import
cn.quantgroup.customer.service.IXyqbService
;
import
cn.quantgroup.customer.service.http.IHttpService
;
import
cn.quantgroup.customer.util.JSONTools
;
import
cn.quantgroup.customer.util.SignUtil
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.google.common.collect.Maps
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -30,7 +30,7 @@ import java.util.Objects;
@Service
(
"xyqbService"
)
public
class
XyqbServiceImpl
implements
IXyqbService
{
@Value
(
"
${api.http}"
)
@Value
(
"
http://api-ka1.liangkebang.net"
)
//${api.http}
private
String
xyqbSysUrl
;
...
...
@@ -317,4 +317,40 @@ public class XyqbServiceImpl implements IXyqbService {
}
return
response
;
}
/**
* 查询订单状态
* @param orderQuery
* @return
*/
@Override
public
JsonResult
<
OrderStatus
>
orderStatusQuery
(
OrderQueryParam
orderQuery
)
{
String
logPre
=
"[XyqbServiceImpl.orderStatusQuery] 查询订单状态"
;
String
url
=
xyqbSysUrl
+
"/ex/ka/order/status"
;
Map
<
String
,
String
>
queryParam
=
new
HashMap
<>(
4
);
queryParam
.
put
(
"orderNo"
,
orderQuery
.
getApplyOrderNo
());
if
(
Objects
.
nonNull
(
orderQuery
.
getLoanId
()))
{
queryParam
.
put
(
"loanId"
,
String
.
valueOf
(
orderQuery
.
getLoanId
()));
}
log
.
info
(
"{} 请求参数 orderQuery={},queryParam={}"
,
logPre
,
orderQuery
,
queryParam
);
Map
param
=
SignUtil
.
sign
(
SignUtil
.
KA_API_KEY
,
queryParam
);
Map
<
String
,
String
>
header
=
new
HashMap
<>(
2
);
header
.
put
(
"Accept"
,
"application/json"
);
header
.
put
(
"Content-Type"
,
"application/x-www-form-urlencoded"
);
String
result
=
httpService
.
post
(
url
,
header
,
param
);
log
.
info
(
"{} 返回结果 result:{}"
,
logPre
,
result
);
if
(
StringUtils
.
isBlank
(
result
))
{
log
.
error
(
"{} 处理失败 queryParam={} result={}"
,
logPre
,
queryParam
,
result
);
return
JsonResult
.
buildErrorStateResult
(
"查询订单状态失败,返回为空"
,
ErrorCodeEnum
.
RETURN_ERROR
);
}
else
{
TypeReference
<
JsonResult
<
OrderStatusXyqb
>>
typeToken
=
new
TypeReference
<
JsonResult
<
OrderStatusXyqb
>>()
{
};
JsonResult
<
OrderStatusXyqb
>
jsonResult
=
JSONTools
.
deserialize
(
result
,
typeToken
);
if
(
Objects
.
isNull
(
jsonResult
)
||
Objects
.
isNull
(
jsonResult
.
getData
()))
{
return
JsonResult
.
buildErrorStateResult
(
"查询订单状态失败,反序列化失败"
,
ErrorCodeEnum
.
RETURN_ERROR
);
}
else
{
return
JsonResult
.
buildSuccessResult
(
"查询订单状态成功"
,
jsonResult
.
getData
().
getCurrentStatus
());
}
}
}
}
src/main/java/cn/quantgroup/customer/util/SignUtil.java
0 → 100644
View file @
3eca0503
package
cn
.
quantgroup
.
customer
.
util
;
import
org.apache.commons.codec.digest.DigestUtils
;
import
org.apache.commons.lang3.RandomStringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
java.security.SignatureException
;
import
java.util.*
;
/**
* xyqb 加签验证工具类
* @author Feng
* @version 2017.12.22
*/
public
class
SignUtil
{
public
static
final
String
KA_API_KEY
=
"100011"
;
private
static
final
long
MAX_RATIO
=
0x258
;
// 十分钟 10 * 60
private
static
Map
<
String
,
String
>
apiKeys
=
new
HashMap
<>();
static
{
apiKeys
.
put
(
KA_API_KEY
,
"aukpaqy3za9lkjisdfaoqtdtxumrjqzm"
);
apiKeys
.
put
(
"xyqb"
,
"cd6yFfEgI0t67JaOYtLxTqXvumfJbsZi"
);
}
public
static
void
addKeys
(
String
appid
,
String
key
)
{
apiKeys
.
put
(
appid
,
key
);
}
/**
* 参数签名
*
* @return map 所有参数 以及 sign
*/
public
static
Map
<
String
,
?>
sign
(
String
appid
,
Map
<
String
,
?>
params
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>();
map
.
putAll
(
params
);
map
.
put
(
"app_id"
,
appid
);
map
.
put
(
"timestamp"
,
String
.
valueOf
(
System
.
currentTimeMillis
()
/
1000
));
map
.
put
(
"noncestr"
,
RandomStringUtils
.
randomAlphanumeric
(
8
));
String
sign
=
signParams
(
map
,
appid
);
map
.
put
(
"sign"
,
sign
);
return
map
;
}
/**
* 签名
*
* @param map
* @return
*/
private
static
String
signParams
(
Map
<
String
,
?>
map
,
String
appid
)
{
List
<
String
>
names
=
new
ArrayList
<
String
>(
map
.
keySet
());
Collections
.
sort
(
names
);
StringBuffer
buffer
=
new
StringBuffer
();
for
(
String
key
:
names
)
{
buffer
.
append
(
key
).
append
(
"="
).
append
(
map
.
get
(
key
)).
append
(
"&"
);
}
buffer
.
append
(
"security_code="
).
append
(
apiKeys
.
get
(
appid
));
String
sign
=
DigestUtils
.
md5Hex
(
buffer
.
toString
());
return
sign
;
}
/**
* 验证签名
*
* @param params
* 1、参数中必须包含 app_id 、timestamp、noncestr,sign
* @return
* @throws IllegalAccessException
*/
public
static
boolean
checkSign
(
Map
<
String
,
?>
params
)
throws
SignatureException
{
String
pid
=
Objects
.
toString
(
params
.
get
(
"app_id"
),
null
);
String
noncestr
=
Objects
.
toString
(
params
.
get
(
"noncestr"
),
null
);
String
timestamp
=
Objects
.
toString
(
params
.
get
(
"timestamp"
),
null
);
String
sign
=
Objects
.
toString
(
params
.
get
(
"sign"
),
null
);
if
(
StringUtils
.
isBlank
(
pid
)
||
StringUtils
.
isBlank
(
noncestr
)
||
StringUtils
.
isBlank
(
timestamp
)
||
StringUtils
.
isBlank
(
sign
))
{
throw
new
SignatureException
(
"参数中必须包含 app_id 、timestamp、noncestr 、sign"
);
}
// 验证时间
int
int13Line83
=
13
;
if
(
timestamp
.
length
()
==
int13Line83
)
{
long
ratio
=
System
.
currentTimeMillis
()
-
Long
.
valueOf
(
timestamp
);
int
int1000Line86
=
1000
;
if
(
ratio
>
(
MAX_RATIO
*
int1000Line86
))
{
throw
new
SignatureException
(
"request overdue ...."
);
}
}
else
{
long
ratio
=
(
System
.
currentTimeMillis
()
/
1000
)
-
Long
.
valueOf
(
timestamp
);
if
(
ratio
>
MAX_RATIO
)
{
throw
new
SignatureException
(
"request overdue ...."
);
}
}
params
.
remove
(
"sign"
);
String
signVal
=
signParams
(
params
,
pid
);
// 签名
return
StringUtils
.
equalsIgnoreCase
(
signVal
,
sign
);
}
}
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