问题描述
用微信的签名校验工具,结果是一致的。百度了一些相同的问题,很多都是说前端传过来的URL需要decode一下,但是我们的URL是前端只需要传一个path过来,然后我再拼接好给他传回去,所以不应该出现这种问题的啊
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
static function GetSign($path)
{
$appid = env('WECHAT_APPID');
$secret = env('WECHAT_SECRET');
$url = self::SIGN_URL . $path;
//缓存内是否存在accessToken。
$accessToken = Cache::remember('accessToken', 120, function () use ($appid, $secret) {
//获取access_token的请求地址
$accessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$secret";
//请求地址获取access_token
$accessTokenJson = self::Curl($accessTokenUrl);
return $accessTokenJson['access_token'];
});
//获取jsapi_ticket的请求地址
$jsapiTicket = Cache::remember('jsapiTicket', 120, function () use ($appid, $secret, $accessToken) {
$ticketUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=$accessToken&type=jsapi";
$jsapiTicketObj = self::Curl($ticketUrl);
return $jsapiTicketObj['ticket'];
});
//随机生成16位字符
$noncestr = str_random(16);
//时间戳
$time = time();
//拼接string1
$jsapiTicketNew = "jsapi_ticket=$jsapiTicket&noncestr=$noncestr×tamp=$time&url=$url";
//对string1作sha1加密
$signature = sha1($jsapiTicketNew);
//存入数据
$data = [
'appid' => $appid,
'timestamp' => $time,
'nonceStr' => $noncestr,
'signature' => $signature,
'jsapiTicket' => $jsapiTicket,
'url' => $url,
'jsApiList' => [
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareWeibo',
'onMenuShareQZone'
]
];
//返回
return $data;
}