微信小程序授权登录将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(); }