最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序 登錄實(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ā)送給客戶(hù)端,寫(xiě)入storage

  5. 客戶(hù)端的每次請(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); //獲取微信用戶(hù)信息(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()']]); //用戶(hù)信息入庫(kù)
          $info=$users_db->getUserInfo($open_id);                  //獲取用戶(hù)信息
          $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返回給客戶(hù)端
        }else{
          $this->ajaxReturn(['error_code'=>0,'sessionid'=>$session_db->getSid($info['id'])]);
        }
        
      }else{
        $this->ajaxReturn(['error_code'=>'用戶(hù)信息獲取失??!']);
      }
      
    }
  }

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

require_once ABS_APP_PATH.'/Addon/Aes/wxBizDataCrypt.php';
class WeixinModel{
  // 獲取微信的用戶(hù)信息(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)文章

  • 微信小程序 頁(yè)面滑動(dòng)事件的實(shí)例詳解

    微信小程序 頁(yè)面滑動(dòng)事件的實(shí)例詳解

    這篇文章主要介紹了微信小程序 頁(yè)面滑動(dòng)事件的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • JS高級(jí)程序設(shè)計(jì)之class繼承重點(diǎn)詳解

    JS高級(jí)程序設(shè)計(jì)之class繼承重點(diǎn)詳解

    這篇文章主要為大家介紹了JS高級(jí)程序設(shè)計(jì)之class繼承重點(diǎn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • JS實(shí)現(xiàn)刷新網(wǎng)頁(yè)后之前瀏覽位置保持不變示例詳解

    JS實(shí)現(xiàn)刷新網(wǎng)頁(yè)后之前瀏覽位置保持不變示例詳解

    這篇文章主要為大家介紹了JS實(shí)現(xiàn)刷新網(wǎng)頁(yè)后之前瀏覽位置保持不變示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 微信小程序 數(shù)據(jù)交互與渲染實(shí)例詳解

    微信小程序 數(shù)據(jù)交互與渲染實(shí)例詳解

    這篇文章主要介紹了微信小程序 數(shù)據(jù)交互與渲染實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • JavaScript嚴(yán)格模式use strict的介紹

    JavaScript嚴(yán)格模式use strict的介紹

    這篇文章主要介紹了JavaScript嚴(yán)格模式use strict,嚴(yán)格模式是JavaScript中的一種限制性更強(qiáng)的變種方式。嚴(yán)格模式并不是JavaScript中的子集,它在語(yǔ)義上與正常的代碼有明顯的差異,下面我們就一起來(lái)學(xué)習(xí)該內(nèi)容吧,需要的朋友也可以參考一下
    2021-12-12
  • 微信小程序 wxapp內(nèi)容組件 text詳細(xì)介紹

    微信小程序 wxapp內(nèi)容組件 text詳細(xì)介紹

    這篇文章主要介紹了微信小程序 wxapp內(nèi)容組件 text詳細(xì)介紹的相關(guān)資料,并附簡(jiǎn)單實(shí)例代碼,需要的朋友可以參考下
    2016-10-10
  • JavaScript事件委托原理

    JavaScript事件委托原理

    這篇文章主要介紹了JavaScript事件委托原理,?事件委托也稱(chēng)為事件代理。就是利用事件冒泡,把子元素的事件都綁定到父元素上。如果子元素阻止了事件冒泡,那么委托就無(wú)法實(shí)現(xiàn),下面我們一起來(lái)學(xué)習(xí)文章的具體詳細(xì)內(nèi)容吧
    2021-12-12
  • 8個(gè)JS的reduce使用實(shí)例和reduce操作方式

    8個(gè)JS的reduce使用實(shí)例和reduce操作方式

    reduce方法是JavaScript中一個(gè)比較強(qiáng)大的方法,可能在平時(shí)開(kāi)發(fā)中,有人根本沒(méi)用過(guò),通過(guò)下面的8個(gè)例子,學(xué)會(huì)reduce的用法以及它的常用場(chǎng)景,需要的朋友可以參考一下
    2021-09-09
  • Javascript 常見(jiàn)的高階函數(shù)詳情

    Javascript 常見(jiàn)的高階函數(shù)詳情

    這篇文章主要介紹了Javascript 常見(jiàn)的高階函數(shù)的相關(guān)資料,高階函數(shù),英文叫 Higher Order function。一個(gè)函數(shù)可以接收另外一個(gè)函數(shù)作為參數(shù),這種函數(shù)就叫做高階函數(shù),需要的朋友可以參考一下
    2021-09-09
  • 分享5個(gè)JS?高階函數(shù)

    分享5個(gè)JS?高階函數(shù)

    這篇文章主要給大家分享了5個(gè)JS高階函數(shù),在JavaScript中,函數(shù)實(shí)際上也是一個(gè)數(shù)據(jù),也就是說(shuō)函數(shù)也可以賦值給一個(gè)變量。本篇文章就來(lái)介紹一些JavaScript中的高階函數(shù)的用法,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2021-12-12

最新評(píng)論

天全县| 遂平县| 韶关市| 全州县| 庄浪县| 福清市| 淄博市| 英德市| 沂水县| 商河县| 荔波县| 南召县| 隆化县| 嵊泗县| 长治市| 宾川县| 龙海市| 佛教| 永修县| 沁阳市| 昌宁县| 榆树市| 临海市| 江门市| 石林| 如皋市| 綦江县| 华阴市| 永川市| 海兴县| 潮州市| 龙泉市| 县级市| 高密市| 温泉县| 新宁县| 拜城县| 阜平县| 济宁市| 雷州市| 周至县|