1. 程式人生 > >laravel php 微信掃碼登入

laravel php 微信掃碼登入

參考來自 http://www.cnblogs.com/txw1958/p/scan-qrcode-login.html

自己做了微信登入 這個相當於筆記 僅供參考

微信掃碼登入需要的資料是微信開放平臺!!!

微信掃碼登入需要的資料是微信開放平臺!!!

微信掃碼登入需要的資料是微信開放平臺!!!

重要的事說三遍,之前一直用錯誤資料除錯 

坑~ .. 

直接進入程式碼階段

1 生產二維碼 有兩種方式

第二種方式是將二維碼嵌入網頁某個div 腦補下樣式 我不貼圖了 我下面會用方式二

在需要放二維碼的頁面引入 http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js 這個JS 然後如下程式碼

//獲取登入二維碼
$(document).on("click", ".noname-login", function () {//登入按鈕觸發事件
    $(".layer").removeClass("hide");
    var data = {};
    var html = template('login-box', data);
    var url = '{!!env("APP_URL")!!}logincallback/'+merchant.hash;
    var callbackUrl = encodeURIComponent(url);
    document.getElementById('layer-box').innerHTML = html;
    var timestamp = (new Date()).valueOf();
    var state = timestamp+Math.floor(Math.random()*100);
    var obj = new WxLogin({//之前的程式碼是點選按鈕之後彈出登入彈框 然後例項化這個類 id表示放這個二維碼的div的id
        id: "ewimg",
        appid: "{{env('WXOPEN_APP_ID')}}",
        scope: "snsapi_login",//掃碼登入用這個引數 引數固定
        redirect_uri: callbackUrl,//掃碼之後成功的回撥
        state: state,//隨機數
        style: "",
        href: ""
    });
})

2 編輯回撥函式

掃描二維碼成功之後 會得到一些引數 先看程式碼 這個函式我沒貼完 只寫到最終回去到微信使用者資料 之後怎麼處理這個資料大家懂得~

    public function logincallback(){   
        $app_id = '***********';
        $app_secret = '**********';

//這裡需要拼接一個url 獲取 access_token
//appid app_secret不做贅述  code為微信伺服器返回的code  grant_type引數寫法固定
        $url='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$app_id.'&secret='.$app_secret.'&code='.$_GET['code'].'&grant_type=authorization_code';
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_URL, $url);
        $json =  curl_exec($ch);
        curl_close($ch);
        $arr=json_decode($json,1);
        //用獲取到的access_token呼叫介面

//拼接URL的引數也不需要贅述了
        $url='https://api.weixin.qq.com/sns/userinfo?access_token='.$arr['access_token'].'&openid='.$arr['openid'].'&lang=zh_CN';
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_URL, $url);
        $json =  curl_exec($ch);
        curl_close($ch);
        $userinfo=json_decode($json,1);

//獲取到userinfo 大工告成~