• 【小程序】使用uni-app搭建小程序环境--登录流程


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

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

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

    ②、然后编写bindGetUserInfo函数:

    1
    2
    3
    4
    5
    6
    7
    8
      bindGetUserInfo(res) {
        console.log(res);
        if (res.detail.userInfo) {
          console.log("点击了同意授权");
        else {
          console.log("点击了拒绝授权");
        }
    }

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

      

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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 是对用户数据进行加密签名的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥

    请求前端代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    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("点击了拒绝授权");
        }
      }           

     

    请求后台代码 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    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);
    }

    相关资料:

  • 相关阅读:
    函数参数太多的一种简化方法
    laravel 获取所有表名
    使用 laravel 的 queue 必须知道的一些事
    git "refusing to merge unrelated histories" 解决方法
    使用 xhprof 进行 php 的性能分析
    php 性能优化
    js原生实现轮播图效果(面向对象编程)
    nextSibling 和nextElementSibling
    如何在页面中使用svg图标
    svg动画 animate
  • 原文地址:https://www.cnblogs.com/websmile/p/12148305.html
Copyright © 2020-2023  润新知