微信小程序授权登录
小程序js书写
/**
* 授权登录点击事件
*/
getUserProfile(e) {
// 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
wx.getUserProfile({
desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
success: (res) => {
let nickname=res.userInfo.nickName
let img = res.userInfo.avatarUrl
wx.login({
success:(res)=>{
// 向后端发送网络请求 获取openid
wx.request({
url: 'http://www.exercise.com/login.php/login',
data:{
code:res.code,
nickname:nickname,
img:img
},
success:(e)=>{
console.log(e)
// 将用户昵称 用户头像 openid放入缓存
wx.setStorageSync('nickname', e.data.nickName)
wx.setStorageSync('img', e.data.img)
wx.setStorageSync('openid', e.data.openid)
wx.switchTab({
url: '/pages/my/my',
})
}
})
}
})
console.log(res)
}
})
},
后端控制器层书写
/**
* 微信授权登录
* @param Request $request
* @return \think\response\Json
*/
public function login(Request $request)
{
// 接收小程序登录code值
$code=$request->get('code');
// 登录用户昵称
$nickname=$request->get('nickname');
// 登录用户头像
$img=$request->get('img');
// 不想封装 直接$url=官方网址
// 拼接请求微信官方网址
$url = sprintf(config('url.url'),$code);
// 向微信官方请求openid
$result=getUrl($url);
$openid=$result['openid'];
$session_key=$result['session_key'];
// 组装入库信息
$data=LoginBusiness::userInfo($nickname,$openid,$img,$session_key);
// 判断是否第一次登录
LoginBusiness::login($openid,$data);
return json($data);
}
在应用公共文件common.php中封装getUr向微信官方请求openid方法
//curl封装
if (!function_exists('geturl')){
function geturl($url){
$headerArray =array("Content-type:application/json;","Accept:application/json");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);
$output = curl_exec($ch);
curl_close($ch);
$output = json_decode($output,true);
return $output;
}
}
business逻辑层
<?php
namespace app\login\business;
use app\login\model\Login;
class LoginBusiness
{
public static function userInfo($nickname,$openid,$img,$session_key){
$data=[
'nickName'=>$nickname,
'openid'=>$openid,
'img'=>$img,
'session_key'=>$session_key
];
return $data;
}
public static function login($openid,$data){
$info=Login::getUserInfo($openid);
if (!$info){
// 用户信息入库
Login::addUserInfo($data);
}
Login::updateUserInfo($data);
}
public static function sms($code,$sms){
if (empty($code)){
return '请先发送验证码';
}
if ($sms!=$code){
return '验证码不正确';
}
}
}

浙公网安备 33010602011771号