1、 将整个json报文(剔除signature字段)参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(key1=value1&key2=value2…)拼接成字符串signBlock。
2、 获取工作密钥signKey, 在signBlock最后拼接上signKey得到signBlock&signKey字符串,,得到sign值signature。
/**
* 生成加签Block
*
* @param jsonString 原始报文
* @return 加签BLOCK
*/
private String generateSignBlockString(String jsonString) {
try {
if (null != jsonString && 0 != jsonString.trim().length()) {
rglog.debug("jsonString=[{}]", jsonString);//原始报文json
JSONObject jsonObject = JSONObject.parseObject(jsonString, Feature.OrderedField);
Map maps = jsonObject.getInnerMap();
//Map maps = (Map)JSON.parse(jsonString);
ArrayList<String> arrayList = new ArrayList<>();
int i = 0;
Object key;
Object value;
for (Object map : maps.entrySet()) {
key = ((Map.Entry) map).getKey();
value = ((Map.Entry) map).getValue();
if (!"signature".equals(key) && null != value) {//将原始报文中的signature字段去除掉
arrayList.add(key + "=" + value + "&");//使用URL键值对的格式(key1=value1&key2=value2…)拼接成字符串signBlock。
}
i++;
}
String[] strArray = arrayList.toArray(new String[arrayList.size()]);
Arrays.sort(strArray);
StringBuffer stringBuffer = new StringBuffer();
for (i = 0; i < strArray.length; i++) {
stringBuffer.append(strArray[i]);
}
return stringBuffer.substring(0, stringBuffer.length() - 1).toString();
}
} catch (Exception e) {
rglog.error("系统异常!");
return null;
}
return null;
}
来源:CSDN
作者:六道老头儿
链接:https://blog.csdn.net/sinat_34974437/article/details/104756995