网友真实露脸自拍10p,成人国产精品秘?久久久按摩,国产精品久久久久久无码不卡,成人免费区一区二区三区

小程序模板網

微信小程序登錄實例(PHP)

發布時間:2018-02-10 11:55 所屬欄目:小程序開發教程

一. 小程序不支持cookie會話

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

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

  3. 使用Redis或者數據庫存儲session

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

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

二、加密數據解碼

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

  

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);
            }
        })
    },


本文地址:http://www.xiuhaier.com/wxmini/doc/course/21969.html 復制鏈接 如需定制請聯系易優客服咨詢:800182392 點擊咨詢
QQ在線咨詢
AI智能客服 ×