首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

微信企業號 JSAPI 簽名錯誤排查:iOS 上 timestamp 必須為字符串類型

     編輯:程式設計疑難解答

問題現象

微信企業號頁面調用 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 計算。

驗證建議

  1. 使用微信官方簽名校驗工具:JS-SDK 簽名校驗頁面(僅支持 jsapi_ticket 簽名)。
  2. 對比 Android/iOS 實際發送的參數,抓包確認 timestamp 類型。
  3. 統一所有平台參數類型為字符串,避免類似坑。

參考資料

知乎同款問題解答:iOS 微信 timestamp 必須為字符串

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved