//appSecret
private static String appSecret = "aaaa";
private static String token = "bbbb"; //token
public static void main(String[] args) throws Exception
{
Map<String, String> textParams = new HashMap<String, String>();
// 添加协议级请求参数
textParams.put("method", apiName);
textParams.put("version", "3.0");
textParams.put("appKey", appKey);
textParams.put("format", "json");
textParams.put("timestamp", new Date().getTime()+"");
textParams.put("token", token);
textParams.put("type", "sync");
String requestBody =
"{\"requestId\":\"00\"," +
"\"deviceType\":\"0\",\"invoiceTypeCode\":\"0\",\"machineNo\":\"00\","
+
"\"sellerTaxNo\":\"0\"," +
"\"apiName\":\"baiwang.tax.monitor.query\"," +
"\"taxNo\":\"0\",\"methodCode\":\"02\"}";
String signString = signTopRequest(textParams, appSecret, requestBody);//签名参
数
System.out.println(signString);
}
/**
* 给 TOP 请求签名。
*
* @param params 所有字符型的 TOP 请求参数
* @param secret 签名密钥
* @return 签名
* @throws Exception
*/
public static String signTopRequest(Map<String, String> params, String secret, String
body) throws Exception
{
// 第一步:检查参数是否已经排序
ArrayList<String> keys = new ArrayList<String>(params.keySet());
Collections.sort(keys);
// 第二步:把所有参数名和参数值串在一起
StringBuilder query = new StringBuilder();
query.append(secret);
for (String key : keys)
{
String value = params.get(key);
if (!isNull(key) && !isNull(value))
{
query.append(key).append(value);
}
}
body.replaceAll("\n","");
body.replaceAll("\t","");
body.replaceAll("\r","");
query.append(body);
query.append(secret);
// 第三步:使用 MD5 加密
byte[] bytes;
MessageDigest md5 = null;
try
{
md5 = MessageDigest.getInstance("MD5");
}
catch (NoSuchAlgorithmException ignored)
{
throw new Exception(ignored);
}
bytes = md5.digest(query.toString().getBytes("UTF-8"));
// 第四步:把二进制转化为大写的十六进制
StringBuilder sign = new StringBuilder();
for (byte b : bytes) {
String hex = Integer.toHexString(b & 0xFF);
if (hex.length() == 1) {
sign.append("0");
}
sign.append(hex.toUpperCase());
}
return sign.toString();
}
public static boolean isNull(String str)
{
return (str==null || "".equals(str)?true:false);
}