微信小程序授权登录(转)

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

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

②、然后编写bindGetUserInfo函数:
  bindGetUserInfo(res) {
    console.log(res);
    if (res.detail.userInfo) {
      console.log("点击了同意授权");
    } else {
      console.log("点击了拒绝授权");
    }
}
③、此时会出现一个弹出框

在这里插入图片描述

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

在这里插入图片描述

⑤、接着是获取用户openid,需要用到微信的wx.login函数
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 是对用户数据进行加密签名的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥

请求前端代码:

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("点击了拒绝授权");
    }
  }    

请求后台代码

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);
}

原博客legendheng:https://www.cnblogs.com/legendheng/p/9469173.html

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值