轉自我的個人博客《微信js-sdk簽名錯誤invalid signature解決方案》
此前在做微信公眾號web頁面使用微信JS SDK時,就遇到過invalid signature錯誤,最近做公眾號web開發又遇到同樣的問題,記錄一下解決過程,下次少走彎路。
微信JS接口簽名校驗工具:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
問題排查步驟
1、后端打印排序后的簽名參數和簽名字符串
簽名參數:
jsapi_ticket=kgt8ON7yVITDhtdwci0qeav68VJEN2x-YTNhPDAliYfI7RkRXepYfOvN8QrfnE-17a9NDKHT5MTKr4jEsLf9Sw&noncestr=DJ7KYIkfyi×tamp=1590541485947&url=https://xxx.xxx.com/mp/comment?employeeId=190928100000
簽名字符串:
a1b4ff4ca592caa22b45047a8c119ce68aa588c5
2、使用校驗工具輸入所有參數,校驗工具提示:不是合法的 jsapi_ticket
排查獲取ticket的方法,我的getTicket方法是復制的getAccessToken方法,發現有漏改的地方,改正。
發布進行調試,依舊報錯invalid signature;
3、再次將所有參數輸入到調試工具進行調試,不再提示ticket不合法,點擊生成簽名,進行對比
校驗工具排序后的參數列表:jsapi_ticket=kgt8ON7yVITDhtdwci0qeav68VJEN2x-YTNhPDAliYfI7RkRXepYfOvN8QrfnE-17a9NDKHT5MTKr4jEsLf9Sw&noncestr=DJ7KYIkfyi×tamp=1590541485&url=https://xxx.xxx.com/mp/comment?employeeId=190928100000
校驗工具生成的簽名為:ff0bf3db633e65aa906efba0bf2e7e3bbf5cf31f
首先對比自己程序打印的排序后參數列表字符串發現,我的timestamp是System.currentTimeMillis()生成,為13位,微信簽名校驗工具排序后變成了10位,修改獲取時間戳方法為System.currentTimeMillis()/1000
再次發布調試,簽名校驗通過。
4、如果自己排序的參數列表和工具生成的參數列表一致,但是生成的簽名不一致,則繼續排查自己的簽名算法是否正確。