微信小程序受權登陸

微信小程序受權通常能夠獲取用戶的openid、暱稱、頭像、用戶所在省和市、性別php

 

①、首先引導用戶點擊受權按鈕

 <button open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">點擊受權</button> 

 

②、而後編寫bindGetUserInfo函數:

  bindGetUserInfo(res) {
    console.log(res);
    if (res.detail.userInfo) {
      console.log("點擊了贊成受權");
    } else {
      console.log("點擊了拒絕受權");
    }
}

 

③、此時會出現一個彈出框,

  

 

④、點擊容許會返回用戶除了openid之外的基本信息:

 

⑤、接着是獲取用戶openid,須要用到微信的wx.login函數

  bindGetUserInfo(res) {
    let info = res;
    if (info.detail.userInfo) {
      console.log("點擊了贊成受權");
      wx.login({
        success: function (res) {
          console.log(res);
        }
      })
    } else {
      console.log("點擊了拒絕受權");
    }  

此時爲微信會返回一個臨時登陸憑證code,只有獲取了這個code才能進一步獲取openid 和session_key前端

 

⑦、請求服務端後臺,讓後臺請求微信再返回openid和session_key,再用微信的本地緩存保存用戶的基本信息

官方文檔建議:會話密鑰session_key 是對用戶數據進行加密簽名的密鑰。爲了應用自身的數據安全,開發者服務器不該該把會話密鑰下發到小程序,也不該該對外提供這個密鑰json

請求前端代碼:小程序

bindGetUserInfo(res) {
    let info = res;
    console.log(info);
    if (info.detail.userInfo) {
      console.log("點擊了贊成受權");
      wx.login({
        success: function (res) {
          if (res.code) {
            wx.request({
              url: 'http://www.test.com/test',
              data: {
                code: res.code,
                nickName: info.detail.userInfo.nickName,
                city: info.detail.userInfo.city,
                province: info.detail.userInfo.province,
                avatarUrl: info.detail.userInfo.avatarUrl
              },
              header: {
                'content-type': 'application/json' // 默認值
              },
              success: function (res) {
                  var userinfo = {};
                  userinfo['id']=res.data.id;
                  userinfo['nickName'] = info.detail.userInfo.nickName;
                  userinfo['avatarUrl'] = info.detail.userInfo.avatarUrl;
                  wx.setStorageSync('userinfo', userinfo);                     
              }
            })
          } else {
            console.log("受權失敗");
          }
        },
      })

    } else {
      console.log("點擊了拒絕受權");
    }
  }            

 

請求後臺代碼 微信小程序

    public static $appid='你的appid';
    public static $secret='你的密鑰';
    
    public function test()
    {
        $params=Request::instance()->param();
        $url="https://api.weixin.qq.com/sns/jscode2session?appid=".self::$appid."&secret=".self::$secret."&js_code=".$params['code']."&grant_type=authorization_code";
        $data=$this->doCurl($url);
        $info['openid']=$data->openid;  //獲取到用戶的openid
        $info['avatar']=$params['avatarUrl'];
        $info['province']=$params['province'];
        $info['city']=$params['city'];
        $info['nickName']=$params['nickName'];
        return json(['status'=>1]);
    }


    public function doCurl($url)
    {
        $curl = curl_init();
        // 使用curl_setopt()設置要獲取的URL地址
        curl_setopt($curl, CURLOPT_URL, $url);
        // 設置是否輸出header
        curl_setopt($curl, CURLOPT_HEADER, false);
        // 設置是否輸出結果
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        // 設置是否檢查服務器端的證書
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        // 使用curl_exec()將CURL返回的結果轉換成正常數據並保存到一個變量
        $data = curl_exec($curl);
        // 使用 curl_close() 關閉CURL會話
        curl_close($curl);
        return json_decode($data);
    }
相關文章
相關標籤/搜索