參數簽名ascii碼排序的坑


參數簽名中通常是按鍵值對中鍵名稱的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了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM