全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

微信小程序 登录实例详解

微信小程序登录

一. 小程序不支持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);
      }
    })
  },

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# 微信小程序  # 登录  # 登录详解  # 登录实例  # 微信小程序实战之登录页面制作(5)  # 微信小程序用户授权  # 以及判断登录是否过期的方法  # 微信小程序获取手机号授权用户登录功能  # 微信小程序实现授权登录  # 一步步教会你微信小程序的登录鉴权  # 微信小程序 登录的简单实现  # 微信小程序 后台登录(非微信账号)实例详解  # 微信小程序 如何保持登录状态  # 微信小程序静默登录的实现代码  # 一文教会你微信小程序如何实现登录  # 客户端  # 转成  # 希望能  # 不支持  # 点击下载  # 谢谢大家  # 需要用  # 过程中  # 变成了  # 发送给  # Session  # session_db  # weixin_login  # public  # str_replace  # return  # data  # php  # define_str_replace  # nbsp 


相关文章: 音响网站制作视频教程,隆霸音响官方网站?  如何撰写建站申请书?关键要点有哪些?  深入理解Android中的xmlns:tools属性  如何通过cPanel快速搭建网站?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  如何高效配置IIS服务器搭建网站?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  上海网站制作开发公司,上海买房比较好的网站有哪些?  建站VPS能否同时实现高效与安全翻墙?  如何安全更换建站之星模板并保留数据?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  建站上传速度慢?如何优化加速网站加载效率?  网站制作企业,网站的banner和导航栏是指什么?  如何在建站主机中优化服务器配置?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何实现建站之星域名转发设置?  如何设置并定期更换建站之星安全管理员密码?  再谈Python中的字符串与字符编码(推荐)  清除minerd进程的简单方法  如何在建站之星绑定自定义域名?  c# 在ASP.NET Core中管理和取消后台任务  济南网站制作的价格,历城一职专官方网站?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  制作门户网站的参考文献在哪,小说网站怎么建立?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何通过商城自助建站源码实现零基础高效建站?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在服务器上三步完成建站并提升流量?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  如何选择高性价比服务器搭建个人网站?  如何在宝塔面板中修改默认建站目录?  北京制作网站的公司,北京铁路集团官方网站?  小型网站制作HTML,*游戏网站怎么搭建?  已有域名和空间,如何快速搭建网站?  个人网站制作流程图片大全,个人网站如何注销?  如何在IIS中新建站点并配置端口与IP地址?  如何在VPS电脑上快速搭建网站?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  Python路径拼接规范_跨平台处理说明【指导】  建站主机服务器选型指南与性能优化方案解析  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  如何在景安云服务器上绑定域名并配置虚拟主机? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。