欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

微信小程序 登錄實(shí)例詳解

 更新時(shí)間:2017年01月16日 14:53:55   投稿:lqh  
這篇文章主要介紹了微信小程序 登錄實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下

微信小程序登錄

一. 小程序不支持cookie會(huì)話

  1. 通過(guò)傳遞與檢驗(yàn)3rd_session來(lái)保持會(huì)話

  2. 3rd_session可以執(zhí)行‘`head -n 80 /dev/urandom | tr -dc A-Za-z0-9 | head -c 168`該命令生成

  3. 使用Redis或者數(shù)據(jù)庫(kù)存儲(chǔ)session

  4. 生成的3rd_session發(fā)送給客戶端,寫(xiě)入storage

  5. 客戶端的每次請(qǐng)求必須帶上3rd_session

二、加密數(shù)據(jù)解碼

  1. $iv,$code是被加密過(guò)的數(shù)據(jù),由于請(qǐng)求過(guò)程中因?yàn)榫幋a原因+號(hào)變成了空格,所以我們需要用下面的方法轉(zhuǎn)換回來(lái)

 

function define_str_replace($data){
    return str_replace(' ','+',$data);
  }

 三、例子:

php

  // 微信登錄
  public function weixin_login(){
    $session_db=D('Session');
    $session_id=I('get.sessionid','');
    $session=$session_db->getSession($session_id);
    if( !empty( $session ) ){
      $this->ajaxReturn(['error_code'=>0,'sessionid'=>$session_id]);
    }else{
      $iv=define_str_replace(I('get.iv')); //把空格轉(zhuǎn)成+
      $encryptedData=urldecode(I('get.encryptedData'));  //解碼
      $code=define_str_replace(I('get.code')); //把空格轉(zhuǎn)成+
      $msg=D('Weixin')->getUserInfo($code,$encryptedData,$iv); //獲取微信用戶信息(openid)
      if($msg['errCode']==0){
        $open_id=$msg['data']->openId;
        $users_db=D('Users');
        $info=$users_db->getUserInfo($open_id);
        if(!$info||empty($info)){
          $users_db->addUser(['open_id'=>$open_id,'last_time'=>['exp','now()']]); //用戶信息入庫(kù)
          $info=$users_db->getUserInfo($open_id);                  //獲取用戶信息
          $session_id=`head -n 80 /dev/urandom | tr -dc A-Za-z0-9 | head -c 168`;  //生成3rd_session
          $session_db->addSession(['uid'=>$info['id'],'id'=>$session_id]); //保存session
        }
        if($session_id){
          $this->ajaxReturn(['error_code'=>0,'sessionid'=>$session_id]);  //把3rd_session返回給客戶端
        }else{
          $this->ajaxReturn(['error_code'=>0,'sessionid'=>$session_db->getSid($info['id'])]);
        }
        
      }else{
        $this->ajaxReturn(['error_code'=>'用戶信息獲取失?。?]);
      }
      
    }
  }

獲取微信信息模型(包括信息解密,官方例子點(diǎn)擊下載)

require_once ABS_APP_PATH.'/Addon/Aes/wxBizDataCrypt.php';
class WeixinModel{
  // 獲取微信的用戶信息(openid)
  public function getUserInfo($code,$encryptedData,$iv){
    $appid=C('appid');
    $secret=C('secret');
    $grant_type='authorization_code';
    $url='https://api.weixin.qq.com/sns/jscode2session';
    $url= sprintf("%s?appid=%s&secret=%s&js_code=%s&grant_type=%",$url,$appid,$secret,$code,$grant_type);
    $user_data=json_decode(file_get_contents($url));
    $session_key= define_str_replace($user_data->session_key);
    $data="";
    $wxBizDataCrypt=new \WXBizDataCrypt($appid,$session_key);
    $errCode=$wxBizDataCrypt->decryptData($encryptedData,$iv,$data);
    return ['errCode'=>$errCode,'data'=>json_decode($data),'session_key'=>$session_key];
  }
  }

javascript

  getUserInfo: function(cb) {
    var that = this
    if (this.globalData.userInfo) {
      typeof cb == "function" && cb(this.globalData.userInfo)
    } else {
      //調(diào)用登錄接口
      wx.login({
        success: function(r) {
          wx.getUserInfo({
            success: function(res) {
              that.login({
                code: r.code,
                iv: res.iv,
                encryptedData: encodeURIComponent(res.encryptedData),
              })
              that.globalData.userInfo = res.userInfo
              typeof cb == "function" && cb(that.globalData.userInfo)
            }
          })
        }
      })
    }
  },
  login: function(param) {
    wx.request({
      url: this.requestUrl('Index/weixin_login'),
      data: param,
      header: {
        'content-type': "application/json",
      },
      success: function(res) {
        var data = JSON.parse(res.data.trim());
        wx.setStorageSync('sessionid', data.sessionid);
      }
    })
  },

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • JavaScript設(shè)計(jì)模式之原型模式和適配器模式示例詳解

    JavaScript設(shè)計(jì)模式之原型模式和適配器模式示例詳解

    這篇文章主要為大家介紹了JavaScript 原型模式和適配器模式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • JavaScript實(shí)際應(yīng)用:innerHTMl和確認(rèn)提示的使用

    JavaScript實(shí)際應(yīng)用:innerHTMl和確認(rèn)提示的使用

    JavaScript實(shí)際應(yīng)用:innerHTMl和確認(rèn)提示的使用...
    2006-06-06
  • JavaScript取消請(qǐng)求方法

    JavaScript取消請(qǐng)求方法

    這篇文章主要為大家介紹了JavaScript取消請(qǐng)求方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 動(dòng)態(tài)內(nèi)存分配導(dǎo)致影響Javascript性能的問(wèn)題

    動(dòng)態(tài)內(nèi)存分配導(dǎo)致影響Javascript性能的問(wèn)題

    今天小編就為大家分享一篇關(guān)于動(dòng)態(tài)內(nèi)存分配導(dǎo)致影響Javascript性能的問(wèn)題,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 17個(gè)JavaScript?單行程序

    17個(gè)JavaScript?單行程序

    這篇文章主要介紹了17個(gè)JavaScript?單行程序?,在?JavaScript?代碼的世界里,在保證代碼易讀性的前提下更少等于更好,下面文章將為大家分享17?個(gè)?JavaScript?單行程序代碼,希望能幫助到大家
    2021-12-12
  • 原生JS以后也支持類(lèi)型注解意義

    原生JS以后也支持類(lèi)型注解意義

    這篇文章主要為大家介紹了原生JS以后也支持類(lèi)型注解意義,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 微信小程序 判斷手機(jī)號(hào)的實(shí)現(xiàn)代碼

    微信小程序 判斷手機(jī)號(hào)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了微信小程序 判斷手機(jī)號(hào)的實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • JavaScript Dom對(duì)象的操作

    JavaScript Dom對(duì)象的操作

    這篇文章主要介紹了JavaScript Dom對(duì)象的操作,文張以瀏覽器網(wǎng)頁(yè)就是一個(gè)Dom樹(shù)形結(jié)構(gòu)做為核心,然后根據(jù)核心進(jìn)行更新Dom節(jié)點(diǎn)、獲得Dom節(jié)點(diǎn)、刪除一個(gè)Dom節(jié)點(diǎn)、添加一個(gè)新的節(jié)點(diǎn)操作,下面文章是詳細(xì)內(nèi)容,需要的朋友可以參考以下
    2021-11-11
  • Vite項(xiàng)目自動(dòng)添加eslint prettier源碼解讀

    Vite項(xiàng)目自動(dòng)添加eslint prettier源碼解讀

    這篇文章主要為大家介紹了Vite項(xiàng)目自動(dòng)添加eslint prettier源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • JS的深淺復(fù)制詳細(xì)

    JS的深淺復(fù)制詳細(xì)

    這篇文章主要介紹JS的深淺復(fù)制,之所以會(huì)出現(xiàn)深淺拷貝的問(wèn)題,實(shí)質(zhì)上是由于JS對(duì)基本類(lèi)型和引用類(lèi)型的處理不同。下面感興趣的小伙伴請(qǐng)跟小編一起來(lái)學(xué)習(xí)吧
    2021-10-10

最新評(píng)論