微信企業號頁面調用 WeixinJSBridge.invoke("openEnterpriseContact", ...) 選人時,iOS 端報錯 fail_invalid signature,Android 正常。所有簽名參數(access_token、jsapi_ticket、group_ticket、nonceStr、timestamp、url)均按文檔生成,wx.config 驗證通過。
iOS 微信客戶端要求 timestamp 參數必須為字符串類型,而代碼中傳遞的是數字類型(long/int)。Android 容忍數字類型,iOS 嚴格校驗導致簽名不一致。
// 錯誤:timestamp 為數字
var timestamp = Math.floor(Date.now() / 1000);
// 正確:強制轉為字符串
var timestamp = String(Math.floor(Date.now() / 1000));
// 或
var timestamp = (Date.now() / 1000).toFixed(0);
簽名字符串拼接時,確保 timestamp 以字符串形式參與 SHA1 計算。
jsapi_ticket 簽名)。timestamp 類型。知乎同款問題解答:iOS 微信 timestamp 必須為字符串