微信小程序授權登錄--PHP后端接口


由於之前做過公眾號的一個開發,所以再開發小程序就沒有那么多坑了,在這也記錄一下開發過程,以方便后續進行參考。

廢話不多說,直接上官方文檔,任何使用第三方開發的,不看文檔就是耍流氓。小程序開發文檔,可以看到需要傳的參數為appid,secret,js_code,grant_type。appid和secret是在小程序后台能夠直接獲取到的,而code是前端經過用戶授權登錄得到的一個code,grant_type就直接寫authorization_code。

好了,接下來上代碼,這里用的是TP5.1開發

public function wxDecode()
    {
        // 接收參數
        $data = request()->param();

        $appid = config('site.app_id');
        $appsecret = config('site.app_secret');
        $grant_type = "authorization_code"; //授權(必填)
        $code = $data['code'];        //有效期5分鍾 登錄會話
        $encryptedData = $data['encryptedData'];
        $iv = $data['iv'];
        $signature = $data['signature'];
        $rawData = $data['rawData'];

        // 拼接url
        $url = "https://api.weixin.qq.com/sns/jscode2session?" . "appid=" . $appid . "&secret=" . $appsecret . "&js_code=" . $code . "&grant_type=" . $grant_type;
        $res = json_decode(curl_get($url), true);
        $sessionKey = $res['session_key']; //取出json里對應的值
        $signature2 = sha1(htmlspecialchars_decode($rawData) . $sessionKey);
        // 驗證簽名
        if ($signature2 !== $signature) {
            return json(['status'=>201,'msg'=>"驗簽失敗"]);
        }

        // 獲取解密后的數據
        $pc = new Decrypt($appid, $sessionKey);
        $errCode = $pc->decryptData($encryptedData, $iv, $date);
    }

上面的$date便是解密之后的數據,是個json對象,因此后續操作需要json_decode,轉換成數組,繼而進行自己的邏輯,比如插入數據庫,返回給前端token等等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM