參數簽名中一般是按鍵值對中鍵名稱的ASCII按從小到大的順序排序後進行hash爲簽名字符串。不要直接使用 SortedDictionary<string, string> 有坑的,他是按數字、小寫字母、大寫字母的順序排的,實際規則應該是數字、大寫字母、小寫字母的順序來排纔對。一直使用他在支付寶和微信的接口中都沒問題,由於支付寶和微信的單詞是用下劃線分隔的,今天接入的一家支付公司用的駝峯命名法坑就出現了。正確的打開姿式以下:微信
/// <summary> /// ASCII值排序 /// </summary> public class OrdinalComparer : System.Collections.Generic.IComparer<String> { public int Compare(String x, String y) { return string.CompareOrdinal(x, y); } } //使用 //SortedDictionary<string, string> sDic 待排序的鍵值對 var sArr = sDic.OrderBy(x => x.Key, new OrdinalComparer()).ToDictionary(x => x.Key, y => y.Value); //而後 foreach sArr 就OK了