// 组装签名参数
Map<String,Object> map=new TreeMap();
map.put("goodsId",goodsId);
map.put("account",account);
map.put("orderNo",orderNo);
map.put("ip",ip);
map.put("notifyUrl",notifyUrl);
......
// 拼接签名结果
String queryTime=System.currentTimeMillis()+"";
String sign=getSignAddQueryTime(map,queryTime,key);
String token=sign+","+memberId+","+tokenQueryTime;
// 设置请求头数据
HttpResponse httpResponse= HttpRequest.post("https://api.xianzhuanxia.com/api/......")
.timeout(20000)
.header("Auth_Token", Base64.encode(token))
.body(JSONUtil.toJsonStr(map))
.contentType(ContentType.JSON.getValue())
.execute();
// 提供签名方法参考
public static String getSignAddQueryTime(Map<String, Object> params, String queryTime, String key) {
try {
StringBuffer pram = new StringBuffer();
for (Map.Entry<String, Object> entry : params.entrySet()) {
if (ObjectUtil.isNotEmpty(entry.getValue())) {
if (entry.getValue() instanceof BigDecimal) {
pram.append(entry.getKey())
.append("=")
.append(((BigDecimal) entry.getValue()).stripTrailingZeros().toPlainString());
} else {
pram.append(entry.getKey()).append("=").append(entry.getValue());
}
}
}
pram.append("queryTime=" + queryTime + "key=").append(key);
return md5(pram.toString()).toLowerCase();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 组装签名参数
Map<String,Object> map=new TreeMap();
map.put("orderNumber",req.getOrderNumber());
map.put("memberId",req.getMemberId());
map.put("goodsId",req.getGoodsId());
map.put("account",req.getAccount());
map.put("faceValue",req.getFaceValue());
map.put("price",req.getPrice());
map.put("status",req.getStatus());
......
// 签名
String localSign= getSign(map,key);
if (!StrUtil.equals(localSign, req.getSign()))//说明签名无效
{
return "签名无效";
}
// 提供异步回调签名方法参考
public static String getSign(Map<String, Object> params, String key) {
try {
Map<String, Object> treeMap = new TreeMap<>(params);
StringBuffer pram = new StringBuffer();
for (Map.Entry<String, Object> entry : treeMap.entrySet()) {
if (ObjectUtil.isNotEmpty(entry.getValue())) {
if (entry.getValue() instanceof BigDecimal) {
pram.append(entry.getKey())
.append("=")
.append(((BigDecimal) entry.getValue()).stripTrailingZeros().toPlainString());
} else {
pram.append(entry.getKey()).append("=").append(entry.getValue());
}
}
}
pram.append("key=").append(key);
log.info("签名原始信息" + pram.toString());
return md5(pram.toString()).toLowerCase();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}