全网整合营销服务商

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

免费咨询热线: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 


相关文章: 电脑免费海报制作网站推荐,招聘海报哪个网站多?  C#怎么使用委托和事件 C# delegate与event编程方法  如何设置并定期更换建站之星安全管理员密码?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  如何选择建站程序?包含哪些必备功能与类型?  如何在阿里云高效完成企业建站全流程?  建站VPS能否同时实现高效与安全翻墙?  制作宣传网站的软件,小红书可以宣传网站吗?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  已有域名和空间,如何快速搭建网站?  广州美橙建站如何快速搭建多端合一网站?  微信小程序 五星评分(包括半颗星评分)实例代码  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  浅析上传头像示例及其注意事项  如何实现建站之星域名转发设置?  b2c电商网站制作流程,b2c水平综合的电商平台?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  建站主机无法访问?如何排查域名与服务器问题  大连网站制作公司哪家好一点,大连买房网站哪个好?  如何在腾讯云服务器上快速搭建个人网站?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  如何用PHP工具快速搭建高效网站?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  如何选择靠谱的建站公司加盟品牌?  个人摄影网站制作流程,摄影爱好者都去什么网站?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  高性价比服务器租赁——企业级配置与24小时运维服务  重庆市网站制作公司,重庆招聘网站哪个好?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  网站制作企业,网站的banner和导航栏是指什么?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  如何用y主机助手快速搭建网站?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  如何高效配置香港服务器实现快速建站?  建站之星在线客服如何快速接入解答?  中山网站制作网页,中山新生登记系统登记流程?  如何在Golang中使用replace替换模块_指定本地或远程路径  如何通过虚拟主机快速完成网站搭建?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  已有域名如何快速搭建专属网站?  制作门户网站的参考文献在哪,小说网站怎么建立?  太原网站制作公司有哪些,网约车营运证查询官网?  建站之星如何实现网站加密操作?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  建站之星导航菜单设置与功能模块配置全攻略  建站之星如何修改网站生成路径? 

您的项目需求

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