鍍金池/ 問答/PHP/ 在做微信分享的簽名時總是提示簽名錯誤

在做微信分享的簽名時總是提示簽名錯誤

問題描述

用微信的簽名校驗工具,結(jié)果是一致的。百度了一些相同的問題,很多都是說前端傳過來的URL需要decode一下,但是我們的URL是前端只需要傳一個path過來,然后我再拼接好給他傳回去,所以不應(yīng)該出現(xiàn)這種問題的啊

相關(guān)代碼

// 請把代碼文本粘貼到下方(請勿用圖片代替代碼)

static function GetSign($path)
{
    $appid = env('WECHAT_APPID');
    $secret = env('WECHAT_SECRET');
    $url = self::SIGN_URL . $path;
    //緩存內(nèi)是否存在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&timestamp=$time&url=$url";
    //對string1作sha1加密
    $signature = sha1($jsapiTicketNew);
    //存入數(shù)據(jù)
    $data = [
        'appid' => $appid,
        'timestamp' => $time,
        'nonceStr' => $noncestr,
        'signature' => $signature,
        'jsapiTicket' => $jsapiTicket,
        'url' => $url,
        'jsApiList' => [
            'onMenuShareTimeline',
            'onMenuShareAppMessage',
            'onMenuShareQQ',
            'onMenuShareWeibo',
            'onMenuShareQZone'
        ]
    ];
    //返回
    return $data;
}


回答
編輯回答
壞脾滊

一般這問題應(yīng)該是簽名的url不對., 先仔細(xì)對比一下

直接讓前端傳完整的地址噻!

你要保證最終使用的 url 要和 前端window.location.href 的值一致

2017年3月13日 23:58
編輯回答
爆扎

生成簽名的url和當(dāng)前頁面的url要一致

2017年1月8日 16:29