小程序登录+DouPHP笔记

发送请求

var inurl = app.globalData.url + "m/wechat_api.php?rec=index&page=1&num=8&username=" + app.globalData.userid;
this.http(inurl, 10, this.callback);
  http:function(category,count,callback){
    wx.request({
      url: inurl,
      data: {},
      header: {
        'content-type': 'application/json' // 默认值
      },
      success: function (res) {
        callback(res.data)
      }
    })
  },
  callback:function(res){
    //数据处理
  }

小程序登录

bindGetUserInfo: function (e) {

    var that = this
    wx.login({
      success: function (res) {
        var code = res.code
        wx.getSetting({
          success: function (res) {
            if (res.authSetting['scope.userInfo']) {
              // 已经授权,可以直接调用 getUserInfo 获取头像昵称

              wx.getUserInfo({
                success: function (res) {
                  //微信用户头像
                  that.setData({
                    logo: res.userInfo.avatarUrl,
                    name: res.userInfo.nickName,
                  })
                  // that.globalData.userInfo = res.userInfo                
                  var rawData = res.rawData;
                  var signature = res.signature;
                  var encryptedData = res.encryptedData;
                  var iv = res.iv;
                  //登录动画
                  wx.showLoading({
                    title: '登录中...',
                  })

                  wx.request({
                    url: app.globalData.url + "m/wechat_api.php?rec=wechat_code",
                    data: {
                      "code": code,
                      "rawData": rawData,
                      "signature": signature,
                      "iv": iv,
                      "encryptedData": encryptedData
                    },
                    method: 'GET',
                    success: function (res) {
                      // success  
                      that.setData({
                        openid: res.data.openid
                      })
                      console.log(res.data);
                      //返回openid  session_key
                      //获取到的3rd_session保存在本地
                      wx.setStorageSync('3rd_session', res.data);
                      //发送查询
                      wx.request({
                        url: app.globalData.url + "m/wechat_api.php?rec=getsession",
                        data: {
                          "rd3_session": res.data
                        },
                        method: 'GET',
                        success: function (res) {
                          if (!res.data) {
                            console.log('登陆后失效了');

                          } else {
                            console.log('登录后没有失效');
                            app.globalData.userid = res.data.user_name;
                            app.globalData.logininfo = res.data;
                            app.globalData.canIUse = 0;
                            //刷新当前登录状态
                            that.onShow();
                            //动画结束
                            setTimeout(function () {
                              wx.hideLoading()      
                            }, 100)
                          }
                        }
                      })
                      //查询结束
                    }
                  })
                }
              })
            } else {
              console.log('用户不给授权');
              wx.showLoading({
                title: '授权失败,返回首页',
              })
              setTimeout(function () {
                wx.hideLoading()
                wx.switchTab({
                  url: '/pages/index/index'
                })
              }, 1000)
            }
          }
        })
      }
    })
  }

小程序服务器端

elseif($rec == "wechat_code"){ 
    $APPID = '';  //小程序APPID 
    $AppSecret = '';  //小程序secret
    $code = $_GET['code']; 

    $url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$APPID.'&secret='.$AppSecret.'&js_code='.$code.'&grant_type=authorization_code';  
    $arr = vegt($url);  

    $arr = json_decode($arr,true);  

    // $openid = $arr['openid'];  
    $session_key = $arr['session_key'];  


    // 数字签名校验  
    $signature = $_GET['signature']; 
    $aaa = stripslashes($_GET['rawData']);

    $signature2 = sha1($aaa.$session_key);  

    if($signature != $signature2){  
        echo "数字签名失败";  
        die;  
    }  

    // 获取信息,对接口进行解密  
    // Vendor("PHP.wxBizDataCrypt");  
    $encryptedData = $_GET['encryptedData'];  

    $iv = $_GET['iv'];  

    if(empty($signature) || empty($encryptedData) || empty($iv)){  
        echo "传递信息不全";  
    }  

    include_once "php/wxBizDataCrypt.php";  
    $pc = new \WXBizDataCrypt($APPID,$session_key);  
    $errCode = $pc->decryptData($encryptedData,$iv,$data);  
    if($errCode != 0){  
        echo "解密数据失败";  
        die;  
    }else {  
        $data = json_decode($data,true);   
        $_SESSION['myinfo'] = $data;
        $save['openid'] = $data['openId'];  
        $save['uname'] = $data['nickName'];  
        $save['unex'] = $data['gender'];  
        $save['address'] = $data['city'];
        $images = $data['avatarUrl'];
        $time = time();  
        $map['openid'] = $data['openId'];  
        !empty($data['unionId']) && $save['unionId'] = $data['unionId'];  
        //save user
        $query = $dou->select($dou->table('user'), '*', '`user_name` = \'' . $map['openid']. '\'');
        $user = $dou->fetch_array($query);
        if(!$user['user_name']){
            $openid = $map['openid'];
            $name = $save['uname'];
            $sql = "INSERT INTO " . $dou->table('user') . " (user_name,name,images,time,jifen) VALUES ('$openid','$name','$images','$time','0')";
            $dou->query($sql);
        }
    }  
//生成第三方3rd_session  
$session3rd  = null;  
$strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";  
$max = strlen($strPol)-1;  

for($i=0;$i<16;$i++){  
    $session3rd .=$strPol[rand(0,$max)];  
}  
    //判断有无此openid
    $query = $dou->select($dou->table('wechat_log'), '*', '`open_id` = \'' . $map['openid']. '\'');
    $user = $dou->fetch_array($query);
    if($user['open_id']){
        $openid = $map['openid'];
        $sql = "UPDATE " . $dou->table('wechat_log') . " SET session_key = '$session_key',3rd_session='$session3rd' WHERE open_id = '$openid'";
        $dou->query($sql);
        echo $session3rd;
        exit;
    }

    $sql = "INSERT INTO " . $dou->table('wechat_log') . " (3rd_session,session_key,open_id) VALUES ('".$session3rd."','".$session_key."','".$map['openid']."')";
    $dou->query($sql);
    echo $session3rd; 
    //鉴权end
}

第二次进入判断登录态有没有失效?本地缓存有没有失效有一方失效都需要重新登录

小程序执行顺序是双线程执行 业务逻辑自己把握

// app.js执行
    var that = this;
    wx.checkSession({
      success: function (res) {
        console.log("登录态没失效");
        //获取用户3rd_session
        var rd3_session = wx.getStorageSync('3rd_session');
        wx.request({
          url: "https://xxxxx.com/m/wechat_api.php?rec=getsession",
          data: {
            "rd3_session": rd3_session
          },
          method: 'GET',
          success: function (res) {
            if (!res.data) {
              console.log('本地缓存已经失效');
              app.globalData.canIUse = 1;
              that.jz_index();
              //console.log(that.globalData.canIUse);
            } else {
              console.log('本地缓存没有失效,不需要重新登录');
              app.globalData.logininfo = res.data;
              app.globalData.userid = res.data.user_name;
              console.log(app.globalData.userid);
              that.jz_index();
            }
          }
        })
      },
      fail: function (res) {
        console.log("需要重新登录");
        app.globalData.canIUse = 1;
        that.jz_index();

      }
    })
    // app.js执行end

原文地址:https://150643.com/510.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DouPHP是一款轻量级企业网站管理系统,基于PHP MYSQL架构的,包含“手机版”、“公众号管理模块”、“小程序”,可以使用它快速搭建一个企业网站。 DouPHP功能特点 操作简单 后台简约明了,从使用者而不是开发者的角度出发设计后台功能布局,完全不需要使用手册就可以轻松进行日常内容编辑工作。 功能简单 系统核心功能只有简单的单页面、商品、文章等模块,基于实际使用甚至可以将商品和文章卸载。因此它可以应用于十分基础的建站要求,实际上很多企业网站所需的功能就很基础。 扩展性强 与传统的网站系统不同,DouPHP并不内置模块生成工具,因为生成工具往往使得系统十分臃肿。我们将功能模块开发好(实际上这样功能模块会有更大的开发空间),然后放在DouPHP自带的在线模块扩展功能里,操作时只需要点击安装,即可实现将功能模块下载并自动完成安装,最重要的是这些模块都是完全独立了,模块安装程序只负责下载、解压、数据库导入工作。 模块插件 功能性模块:投票模块、自定义表单模块、工单模块等、会员模块、订单模块、视频模块、下载模块、图片模块等; 企业官网模块:业务范围、解决方案、团队介绍、合作伙伴、资质证书、人才招聘、案例展示等; 系统基础模块:公众号模块、小程序模块、内容碎片、数据导出EXCEL模块; 插件扩展:支付宝、微信支付、PAYPAL、QQ登录、微信登录、微博登录; 放心使用 系统免费开源,任何人可下载使用DouPHP,包括企业,我们并不限制将DouPHP用于商业用途。关于定制开发,不会因为是DouPHP官方就收取更高的费用,我们采取低价策略提供专业技术服务,统一策略应用于收费模板和模块。 系统定位 致力于中小企业搭建官网建设,但又不限于企业网站,基于现有框架通过模块扩展提供个人博客、网上商城、投票系统、企业在线办公等需求的轻量级解决方案。 开发愿景 我们希望开发一款面向使用者的网站管理系统。 DouPHP截图 相关阅读 同类推荐:站长常用源码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值