国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

微信小程序 登錄實例詳解

2019-11-19 17:55:05
字體:
來源:轉載
供稿:網友

微信小程序登錄

一. 小程序不支持cookie會話

  1. 通過傳遞與檢驗3rd_session來保持會話

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

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

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

  5. 客戶端的每次請求必須帶上3rd_session

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

  1. $iv,$code是被加密過的數(shù)據(jù),由于請求過程中因為編碼原因+號變成了空格,所以我們需要用下面的方法轉換回來

 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')); //把空格轉成+      $encryptedData=urldecode(I('get.encryptedData'));  //解碼      $code=define_str_replace(I('get.code')); //把空格轉成+      $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()']]); //用戶信息入庫          $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'=>'用戶信息獲取失敗!']);      }          }  }

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

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 {      //調用登錄接口      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);      }    })  },

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄冈市| 彰化市| 洪湖市| 喀什市| 商洛市| 朝阳区| 桓仁| 洛扎县| 响水县| 集安市| 开原市| 南京市| 湟中县| 敦煌市| 娄底市| 稷山县| 榆林市| 武宣县| 五华县| 正定县| 韶山市| 青冈县| 德庆县| 民勤县| 宁武县| 门头沟区| 讷河市| 汝城县| 南江县| 邓州市| 滕州市| 兴隆县| 高雄县| 临邑县| 全南县| 吴堡县| 黄龙县| 崇礼县| 崇州市| 同德县| 鹤壁市|