MD5Util
public class MD5Util {
public static String getMD5String(String value) {
try {
MessageDigest md = MessageDigest.getInstance("md5");
byte[] e = md.digest(value.getBytes());
return toHexString(e);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return value;
}
}
public static String getMD5String(byte[] bytes) {
try {
MessageDigest md = MessageDigest.getInstance("md5");
byte[] e = md.digest(bytes);
return toHexString(e);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return "";
}
}
private static String toHexString(byte bytes[]) {
StringBuilder hs = new StringBuilder();
String stmp = "";
for (int n = 0; n < bytes.length; n++) {
stmp = Integer.toHexString(bytes[n] & 0xff);
if (stmp.length() == 1)
hs.append("0").append(stmp);
else
hs.append(stmp);
}
return hs.toString();
}
}
签名工具类
/**
* @author admin
*
*/
public class SignUtil {
static Logger log = LoggerFactory.getLogger(SignUtil.class);
/**
* 签名校验
*
* @param param
* @return
*/
public static boolean checkSign(Map<String, String> param, String signKey) {
String sign = param.get("sign");
if (StringUtils.isBlank(sign)) {
return false;
}
if (sign.length() != 32) {
return false;
}
param.remove("sign");
String tempSign = getSign(param, signKey);
return tempSign.equalsIgnoreCase(sign);
}
public static String getSign(Map<String, String> param, String signKey) {
String tempSign = MD5Util.getMD5String(sortParam(param, signKey));
return tempSign;
}
private static String sortParam(Map<String, String> param, String signKey) {
List<String> keys = new ArrayList<String>(param.keySet());
// 排序
Collections.sort(keys);
StringBuilder sb = new StringBuilder();
for (String key : keys) {
if (StringUtils.isBlank(param.get(key))) {
continue;
}
if (StringUtils.isNotBlank(sb.toString())) {
sb.append("&");
}
sb.append(key);
sb.append("=");
sb.append(param.get(key));
}
sb.append("&");
sb.append("key=");
sb.append(signKey);
return sb.toString();
}
public static String sortParam(Map<String, String> param) {
List<String> keys = new ArrayList<String>(param.keySet());
// 排序
Collections.sort(keys);
StringBuilder sb = new StringBuilder();
for (String key : keys) {
if (StringUtils.isBlank(param.get(key))) {
continue;
}
if (StringUtils.isNotBlank(sb.toString())) {
sb.append("&");
}
sb.append(key);
sb.append("=");
sb.append(param.get(key));
}
return sb.toString();
}
}接口请求demo
public class Test {
private static final Logger log = LoggerFactory.getLogger(Test.class);
private static final Integer clientId = 2;
private static final String secretKey = "nmvaCw5EsyaAmEQul1k5crRwXr2S8dWw";
public static void main(String [] args){
//注册并登录
userLogin();
//上分
addCoin();
//下分
descCoin();
//查询余额
getCoin();
}
public static String userLogin() {
Map<String, String> param = new HashMap<>();
try {
param.put("time", System.currentTimeMillis() + "");
param.put("clientId", clientId + "");
param.put("loginId", "1000");
param.put("coin", "usdt");
param.put("lang", "zh_cn");
param.put("returnUrl", URLEncoder.encode("http://www.baidu.com", "utf-8"));
String sign = SignUtil.getSign(param, secretKey);
param.put("sign", sign);
HttpClientResult result = HttpClientUtils.doPost("http://host/users/open/userLogin", param);
System.out.println("游戏地址:"+result.getContent());
if(result.getCode() == HttpStatus.SC_OK){
return result.getContent();
}else {
//TODO 错误
}
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
public static Double addCoin(){
Map<String, String> param = new HashMap<>();
try {
param.put("time", System.currentTimeMillis() + "");
param.put("clientId", clientId + "");
param.put("loginId", "1000");
param.put("coin", "usdt");
param.put("orderId",UUID.randomUUID().toString());//此参数为了方式重复操作
param.put("amount","1.0");
String sign = SignUtil.getSign(param, secretKey);
param.put("sign", sign);
HttpClientResult result = HttpClientUtils.doPost("http://host/users/open/changeCoin", param);
System.out.println("加 1.0,操作后余额:"+result.getContent());
if(result.getCode() == HttpStatus.SC_OK){
return new BigDecimal(result.getContent()).stripTrailingZeros().doubleValue();
}else {
//TODO 错误
}
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
public static Double descCoin(){
Map<String, String> param = new HashMap<>();
try {
param.put("time", System.currentTimeMillis() + "");
param.put("clientId", clientId + "");
param.put("loginId", "1000");
param.put("coin", "usdt");
param.put("orderId", UUID.randomUUID().toString());//此参数为了方式重复操作
param.put("amount","-0.001");
String sign = SignUtil.getSign(param, secretKey);
param.put("sign", sign);
HttpClientResult result = HttpClientUtils.doPost("http://host/users/open/changeCoin", param);
System.out.println("减0.001,操作后余额:"+result.getContent());
if(result.getCode() == HttpStatus.SC_OK){
return new BigDecimal(result.getContent()).stripTrailingZeros().doubleValue();
}else {
//TODO 错误
}
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
public static Double getCoin(){
Map<String, String> param = new HashMap<>();
try {
param.put("time", System.currentTimeMillis() + "");
param.put("clientId", clientId + "");
param.put("loginId", "1000");
param.put("coin", "usdt");
String sign = SignUtil.getSign(param, secretKey);
param.put("sign", sign);
HttpClientResult result = HttpClientUtils.doPost("http://host/users/open/getCoin", param);
System.out.println("查询余额:"+result.getContent());
if(result.getCode() == HttpStatus.SC_OK){
return new BigDecimal(result.getContent()).stripTrailingZeros().doubleValue();
}else {
//TODO 错误
}
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
}