在雙 12 活動高峰期,用戶頻繁反饋微信支付失敗,錯誤截圖提示「缺少參數 timeStamp」。開發環境測試卻一切正常,線上卻頻發,極具迷惑性。
經過代碼回溯,發現問題出在 WxPay.JsApiPay.php 中對 timeStamp 參數的類型處理。微信 JSAPI 規範要求 timeStamp 為**字符串**類型,但代碼中直接傳入了整型變量,導致簽名驗證失敗。
打開 WxPay.JsApiPay.php,找到設定時間戳的代碼行:
// 錯誤寫法:傳入整型 $jsapi->SetTimeStamp($timeStamp);
修改為強制字符串類型:
// 正確寫法:雙引號轉為字符串
$jsapi->SetTimeStamp("$timeStamp");
此修改確保生成的 JS-SDK 配置對象中 timestamp 為字符串,符合微信規範,簽名驗證即可通過。
微信公眾號支付需經過網頁授權獲取 OpenID,**發起支付的頁面 URL 不得攜帶查詢參數**(如 ?id=123),否則會報錯「return_url 不存在」。
https://domain.com/pay?order_id=100https://domain.com/pay/100。這是一個典型的「強類型語言思維在弱類型語言中踩坑」案例。PHP 變量類型自動轉換雖方便,但在對接嚴格要求參數類型的第三方 API(如微信支付)時,必須顯式控制類型。建議在封裝 SDK 時,對所有輸出參數進行類型檢查與轉換,從源頭杜絕此類低級錯誤。