1、 將整個json報文(剔除signature欄位)引數按照引數名ascii碼從小到大排序(字典序),使用url鍵值對的格式(key1=value1&key2=value2…)拼接成字串signblock。即生成數字簽名的字串
/**
* 生成加簽block
** @param jsonstring 原始報文
* @return 加簽block
*/private string generatesignblockstring(string jsonstring) ]", jsonstring);//原始報文json
jsonobject jsonobject = jsonobject.parseobject(jsonstring, feature.orderedfield);
map maps = jsonobject.getinnermap();
//map maps = (map)json.parse(jsonstring);
arraylistarraylist = new arraylist<>();
int i = 0;
object key;
object value;
for (object map : maps.entryset())
i++;
}string strarray = arraylist.toarray(new string[arraylist.size()]);
arrays.sort(strarray);
stringbuffer stringbuffer = new stringbuffer();
for (i = 0; i < strarray.length; i++)
return stringbuffer.substring(0, stringbuffer.length() - 1).tostring();
}} catch (exception e)
return null;
}
2、 獲取工作金鑰signkey, 在signblock最後拼接上signkey得到signblock&signkey字串,,得到sign值signature。
該方法只適用於對單層的json資料進行拼接與排序,對於內層巢狀的json不能實現排序
引數名ASCII碼從小到大排序(字典序)
第一步,設所有傳送或者接收到的資料為集合m,將集合m內非空引數值的引數按照引數名ascii碼從小到大排序 字典序 使用url鍵值對的格式 即key1 value1 key2 value2 拼接成字串stringa。特別注意以下重要規則 public static void main string a...
C 引數按照ASCII碼從小到大排序(字典序)
在對接第三方支付的時候,第三方會要求引數按照ascii碼從小到大排序。如下 public static void requestpay public static string getpara程式設計客棧msrc dictionary程式設計客棧 string paramsmap string re...
從小到大排序
六一兒童節,老師帶了很多好吃的巧克力到幼兒園。每塊巧克力j的重量為w j 對於每個小朋友i,當他分到的巧克力大小達到h i 即w j h i 他才會上去表演節目。老師的目標是將巧克力分發給孩子們,使得最多的小孩上台表演。可以保證每個w i 0且不能將多塊巧克力分給乙個孩子或將一塊分給多個孩子。第一行...