微信簽名無效問題處理
微信登錄后前端頁面上的地址其實已經變了,首頁地址后面加上了一串code參數,剛開始以為分享地址就是首頁地址,直接在服務端代碼里寫死了,生成簽名后返給前端頁面,前端頁面一直提醒簽名無效,在微信js接口簽名校驗工具中(https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign),生成的簽名是正確的,各種找問題,后來突然發現微信登錄首頁地址后面有參數,所以讓前端傳給服務端
一個地址,然后去生成分享簽名參數,分享成功。
public function getSignPackage($urls) {
$jsapiTicket = $this->getJsApiTicket();
//
注
意 URL
一
定
要
動
態
獲
取
,
不
能 hardcode.
//$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
//$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
//$url = $protocol.$url;
$timestamp = time();
$nonceStr = $this->createNonceStr();
//
這
里
參
數
的
順
序
要
按
照 key
值 ASCII
碼
升
序
排
序
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$urls";
$signature = sha1($string);
$signPackage = array(
"appId" => config('wx_conf')['appid'],
"nonceStr" => $nonceStr,
"timestamp" => $timestamp,
"url" => $urls,
"signature" => $signature,
"rawString" => $string
);
return $signPackage;
}