微信小程序授权登录将open_id传至后台并入库

要求能把用户昵称、头像以及open_id写入数据库,服务端保持用户登录状态

wxml:

<block wx:else>
  <button type="primary"  open-type="getUserInfo" bind:tap="login">授权登录</button>
</block>

wxjs:

// index.js
// 获取应用实例
const app = getApp()

Page({
  data: {
  state:false
  },
  onReady:function(){
    var uid=wx.getStorageSync('uid');
    if (uid) {
      this.setData({
        state:true
      })
    }
  },
  login(evt){
    var that=this;
    //    wx.getUserProfile获取用户信息
    wx.getUserProfile({
      // desc    声明获取用户个人信息后的用途,不超过30个字符
      desc: 'desc',
      success:res=>{
        
        if (res.userInfo) {
          /*  wx.login 调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key)*/
          wx.login({
            success:ret=>{
              // 获取code
              var code=ret.code;
              // 获取用户昵称
              var nickName=res.userInfo.nickName;
              // 获取用户照片
              var avatarUrl=res.userInfo.avatarUrl;
              // 发送至php后端
              wx.request({
                url: 'http://www.tp6.com/api/v1/wxAuthorizationLogin', //仅为示例,并非真实的接口地址
                data: {
                  code:code,
                  nickName:nickName,
                  avatarUrl:avatarUrl
                },
                method:"POST",
                header: {
                  'content-type': 'application/json' // 默认值
                },
                // 数据返回json格式
                success (re) {
                  // console.log(re.data)
                  // 将用户id储存于本地
                  wx.setStorageSync('uid', re.data.data);
                  that.setData({
                    state:true
                  })
                  wx.switchTab({
                    // 跳转至首页
                    url: '/pages/index/index',
                  })
                }
              })

            }
          })
        }
      }
    })
  }


})

php控制器代码:

//    接受微信小程序的发送的接口
    public function wxAuthorizationLogin(Request  $request){
        $params=$request->post();
        print_r($params);die;
//        获取appid
        $appid = "wx8dbfb7178d00fe05";
        // 从微信公众平台获得secret
        $secret = "4960b93dde48a2cbb822b4fef7e66b6f";
        // 发送请求换取openid和sessionkey
        $url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=".$params['code']."&grant_type=authorization_code";
        // 暂使用file_get_contents()发送请求,你可以使用CURL扩展的形式实现
        $res = json_decode(file_get_contents($url),true);
        $params['openid']=$res['openid'];

        $getUserInfo=User::getUserInfo($res['openid']);
        if ($getUserInfo){
//            根据用户id进行修改
            $params['id']=$getUserInfo['id'];
            User::updUser($params);
            $uid=$getUserInfo['id'];
        }else{
            //       第一次登陆 获取用户信息并添加入库
            $addUser=User::addUser($params);
//            取出$UID=发送自后台
            $uid=$addUser['id'];
        }
        return jsonData(200,'ok',$uid);
    }

 

//判断用户是否登录
   public function isLogin(Request $request){
        $uid=$request->post('uid');
        $getUserInfos=User::getUserInfos($uid);
        if ($getUserInfos){
            return jsonData(200,'ok');
        }

    }

 

php模型代码:

//    添加入库
    public static function addUser($params){
        return self::create($params);
    }
    //修改头像及昵称
public static function updUser($params){
        return self::update($params);
    }
    public static function getUserInfos($uid){
        return self::find($uid);
    }
//    判断用户是否登录模型代码
    public static function getUserInfo($openid){
        return self::where('openid',$openid)->find();
    }

 

 

 

posted @ 2021-10-31 20:27  王越666  阅读(837)  评论(0编辑  收藏  举报