php--tp5小程序授权登录
public function login()
{
$appid = ''; //小程序appid
$secret = ''; //小程序秘钥
$code = input('code'); //接收小程序端传的code参数
//拼接微信接口登录接口地址
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=".$appid."&secret=".$secret."&js_code=".$code."&grant_type=authorization_code";
$data = file_get_contents($url); //请求微信登录接口
$data = json_decode($data,true); //将微信返回值转换成数组
//如果返回值中有openid参数表示登录成功
if(isset($data['openid'])){
$user = Users::where('openid',$data['openid'])->find(); //在数据库中查询当前登录用户信息
$userinfo = json_decode(input('userinfo'),true); //接收小程序端用户数据
//判断该用户在数据库中是否存在
if($user)
{
//存在更新数据库用户数据
$user->img = $userinfo['avatarUrl'];
$user->nickname = $userinfo['nickName'];
$user->save();
return $this->return_msg(true,'登录成功',$user);
}else{
//不存在根据自己数据库的数据结构添加用户数据
$user = new Users();
$user->nickname = $userinfo['nickName'];
$user->openid = $data['openid'];
$user->img = $userinfo['avatarUrl'];
$user->createtime = time();
$user->save();
return $this->return_msg(true,'登录成功',$user);
}
}else{
return $this->return_msg(false,'登录失败');
}
}
小程序页面
<button open-type="getUserInfo" bindgetuserinfo="getUserInfo">授权登录</button>
小程序前端
getUserInfo: function() {
let that = this
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
that.setData({
is_login:false,
})
wx.getSetting({
success: ress => {
if (ress.authSetting['scope.userInfo']) {
// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
this.getinfo(res.code)
}else{
wx.request({
url: app.globalData.url+'login/getname',
data:{
shop_id:app.globalData.shop_id
},
success:function(data){
that.setData({
is_login:true,
name:data.data.data.name,
logo:data.data.data.logo
})
that.getinfo(data.code)
}
})
}
}
})
}
})
},
login:function(code){
let that = this
wx.request({
url: app.globalData.url+'login/login',
data:{
shop_id:app.globalData.shop_id,
code:code,
nickname:that.data.nickname,
img:that.data.img,
gender:that.data.gender,
},
success:function(data){
console.log(data)
}
})
},
getinfo:function(code){
wx.getUserInfo({
success: res => {
// 可以将 res 发送给后台解码出 unionId
var userinfo = JSON.parse(res.rawData)
this.setData({
nickname:userinfo.nickName,
gender:userinfo.gender,
img:userinfo.avatarUrl,
})
app.globalData.userinfo = userinfo
this.login(code)
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (this.userInfoReadyCallback) {
this.userInfoReadyCallback(res)
}
}
})
}
还没有评论,来说两句吧...