簽名算法

簽名生成的通用步驟如下:

第一步,設所有發送或者接收到的數據為集合M,將集合M內非空參數值的參數按照參數名ASCII碼從小到大排序(字典序),使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

特別注意以下重要規則:

  • 參數名ASCII碼從小到大排序(字典序)

  • 如果參數的值為空不參與簽名

  • 參數名區分大小寫

  • 驗證調用返回時,傳送的sign參數不參與簽名,將生成的簽名與該sign值作校驗。

  • 若參數中有收款信息,則需要將其轉為JSON。

  • 收款信息異步回調中的收款信息需要先轉為數組,再將其轉為JSON,才可參與簽名。

第二步,在stringA最後拼接上key得到stringSignTemp字符串,並對stringSignTemp進行MD5運算,再將得到的字符串所有字符轉換為大寫,得到sign值signValue。注意:密鑰的長度為32個字節。key为商戶ApiKey。

舉例:

假設傳送的參數如下:

mchId:IPq15ZFXBFLIqRuY
mchTransNo:123456789
coinName:INR
amount:100
notifyUrl:https://test.com
paymentNotifyUrl:https://test.com

第一步:對參數按照key=value的格式,並按照參數名ASCII字典序排序如下:

stringA="amount=100&coinName=INR&mchId=IPq15ZFXBFLIqRuY&mchTransNo=123456789&notifyUrl=https://test.com&paymentNotifyUrl=https://test.com";

第二步:拼接商戶ApiKey,生成簽名:

MD5簽名方式:

stringSignTemp=stringA+"&key=IPq15ZFXBFLIqRuY" //注:key為商戶ApiKey

sign=MD5(stringSignTemp).toUpperCase()="F694ED4D44A60DB500045184BD13AF84" //注:MD5簽名方式

Last updated