zoukankan      html  css  js  c++  java
  • 微信小程序授权登录

    微信小程序授权一般可以获取用户的openid、昵称、头像、用户所在省和市、性别

    ①、首先引导用户点击授权按钮

     <button open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">点击授权</button> 

    ②、然后编写bindGetUserInfo函数:

      bindGetUserInfo(res) {
        console.log(res);
        if (res.detail.userInfo) {
          console.log("点击了同意授权");
        } else {
          console.log("点击了拒绝授权");
        }
    }

    ③、此时会出现一个弹出框,

      

    ④、点击允许会返回用户除了openid以外的基本信息:

    ⑤、接着是获取用户openid,需要用到微信的wx.login函数

      bindGetUserInfo(res) {
        let info = res;
        if (info.detail.userInfo) {
          console.log("点击了同意授权");
          wx.login({
            success: function (res) {
              console.log(res);
            }
          })
        } else {
          console.log("点击了拒绝授权");
        }  

    此时为微信会返回一个临时登录凭证code,只有获取了这个code才能进一步获取openid 和session_key

    ⑦、请求服务端后台,让后台请求微信再返回openid和session_key,再用微信的本地缓存保存用户的基本信息

    官方文档建议:会话密钥session_key 是对用户数据进行加密签名的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥

    请求前端代码:

    bindGetUserInfo(res) {
        let info = res;
        console.log(info);
        if (info.detail.userInfo) {
          console.log("点击了同意授权");
          wx.login({
            success: function (res) {
              if (res.code) {
                wx.request({
                  url: 'http://www.test.com/test',
                  data: {
                    code: res.code,
                    nickName: info.detail.userInfo.nickName,
                    city: info.detail.userInfo.city,
                    province: info.detail.userInfo.province,
                    avatarUrl: info.detail.userInfo.avatarUrl
                  },
                  header: {
                    'content-type': 'application/json' // 默认值
                  },
                  success: function (res) {
                      var userinfo = {};
                      userinfo['id']=res.data.id;
                      userinfo['nickName'] = info.detail.userInfo.nickName;
                      userinfo['avatarUrl'] = info.detail.userInfo.avatarUrl;
                      wx.setStorageSync('userinfo', userinfo);                     
                  }
                })
              } else {
                console.log("授权失败");
              }
            },
          })
    
        } else {
          console.log("点击了拒绝授权");
        }
      }            
    

     

    请求后台代码 

        public static $appid='你的appid';
        public static $secret='你的密钥';
        
        public function test()
        {
            $params=Request::instance()->param();
            $url="https://api.weixin.qq.com/sns/jscode2session?appid=".self::$appid."&secret=".self::$secret."&js_code=".$params['code']."&grant_type=authorization_code";
            $data=$this->doCurl($url);
            $info['openid']=$data->openid;  //获取到用户的openid
            $info['avatar']=$params['avatarUrl'];
            $info['province']=$params['province'];
            $info['city']=$params['city'];
            $info['nickName']=$params['nickName'];
            return json(['status'=>1]);
        }
    
    
        public function doCurl($url)
        {
            $curl = curl_init();
            // 使用curl_setopt()设置要获取的URL地址
            curl_setopt($curl, CURLOPT_URL, $url);
            // 设置是否输出header
            curl_setopt($curl, CURLOPT_HEADER, false);
            // 设置是否输出结果
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            // 设置是否检查服务器端的证书
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            // 使用curl_exec()将CURL返回的结果转换成正常数据并保存到一个变量
            $data = curl_exec($curl);
            // 使用 curl_close() 关闭CURL会话
            curl_close($curl);
            return json_decode($data);
        }
    

      

  • 相关阅读:
    【LeetCode】152. 乘积最大子数组(DP)
    【剑指Offer】49. 丑数(三指针)
    [P1979][NOIP2013] 华容道 (BFS建图+SPFA)
    [P1850][NOIP2016] 换教室 (期望+DP+Floyd)
    差分约束学习笔记
    [P1291][SHOI2002] 百事世界杯之旅 (期望)
    [P4342][IOI1998] Polygon (区间DP)
    [P3802] 小魔女帕琪 (期望)
    [P1273] 有线电视网 (树形DP+分组背包)
    树链剖分学习
  • 原文地址:https://www.cnblogs.com/legendheng/p/9469173.html
Copyright © 2011-2022 走看看