• 微信小程序登陆授权


    小程序前端代码

    function WXlogin(){
      wx.login({
        success: function (code) {
          wx.getUserInfo({
            success:function(userInfo){
                //发起请求
                wx.request({
                  url: domain+'wxopen/wxapp/login',
                  method:"POST",
                  data:{
                    code: code.code,
                    encryptedData: userInfo.encryptedData,
                    iv: userInfo.iv,
                    rawData: userInfo.rawData,
                    signature: userInfo.signature,
                    appid:extConfig.appid
                  },
                  success:function(res){
                    console.log(res,'login')
                    wx.setStorageSync('session_3rd', res.data);//存token
                  }
                })
            }
          })
          
        }
      });
    }
    
    //重新登陆更新
    function reLogin(sess_3rd){
      console.log(sess_3rd,'s3rd')
      //发起请求
      wx.request({
        url: domain + 'wxopen/wxapp/reLogin',
        method: "POST",
        data: {
          session: sess_3rd,
        },
        success: function (res) {
          console.log(res, 'relogin')
          if(res.data == 0){
            WXlogin();//重新登陆
          }else{
            wx.setStorageSync('session_3rd', res.data);//存token
          }
          
        }
      })
    }
    

      

    后端PHP代码

    function login(){
            $code = input('code');//登陆凭证
            $encryptedData = input('encryptedData');//
            $iv = input('iv');//
            $rawData = input('rawData');//
            $signature = input('signature');//
            $appid = input('appid');
    
    
            //第三方token,换取session_key
            $comp_token = $this->component->getAccessToken();
            $url ='https://api.weixin.qq.com/sns/component/jscode2session?appid='.$appid.'&js_code='.$code.'&grant_type=authorization_code&component_appid='.$this->appid.'&component_access_token='.$comp_token;
    
            $result = send_get($url);
            $result = json_decode($result,true);
            trace($result,'登陆返回');
    
            //根据业务需要对数据包进行签名校验,确保数据的完整性。
            $signature2 = sha1( $rawData.$result['session_key']);
            if ($signature != $signature2){
                return ['msg'=>'签名检验失败','status'=>0];
            }
    
            //解密获得用户的完整敏感信息
            $pc = new wxappBizDataCrypt($appid, $result['session_key']);
    
            $errCode = $pc->decryptData($encryptedData, $iv, $data );
    
            if ($errCode == 0) {
                $data = json_decode($data,true);
                $data['appid'] = $data['watermark']['appid'];
                $session_3rd = bin2hex(random_bytes(9));
    
                $data['session_3rd'] = $session_3rd;
    
                //检查用户是否存在,进行增加更新操作
                $userInfo = new UserInfo();
                $users = $userInfo::get(['openid'=>$result['openid']]);
                if ($users){
                    $ret = $userInfo->allowField(true)->isUpdate(true)->save($data,['openid'=>$result['openid']]);
    
                }else{
                    $ret = $userInfo->allowField(true)->isUpdate(false)->save($data);
                }
    
                if ($ret)
                    return $session_3rd;
            }
            return 0;
        }
    
    
        //登陆过期,重新登陆
        function reLogin(){
            $session = input('session');
            $users = $this->user->where(['session_3rd'=>$session])->find();
            if ($users){
                $session_3rd = bin2hex(random_bytes(9));
                $ret = $this->user->where('id',$users['id'])->update(['session_3rd'=>$session_3rd]);//更新3rd
    
                return $session_3rd;
            }else{
                return 0;
            }
        }
    

      

  • 相关阅读:
    作诗(si)[分块]
    【洛谷 P3469】[POI2008]BLO-Blockade(割点)
    【洛谷 P2464】[SDOI2008]郁闷的小J(线段树)
    【BZOJ 3907】网格(Catalan数)
    【洛谷 P4211】[LNOI2014]LCA(树链剖分,差分)
    【洛谷 P2480】 [SDOI2010]古代猪文(中国剩余定理,Lucas定理)
    【洛谷 P3842】[TJOI2007]线段(DP)
    【洛谷 P2346】四子连棋(状态压缩,搜索)
    【洛谷 P1363】幻想迷宫(搜索)
    【洛谷 P1364】医院设置(树的重心)
  • 原文地址:https://www.cnblogs.com/pangxiaox/p/8321864.html
Copyright © 2020-2023  润新知