公众号小程序调用微信登录API实现用户授权流程详解

我们以实际案例,展示如何通过官方API实现公众号小程序内用户登录授权。以下是完整步骤与关键配置

准备工作与参数配置

在开始前,需完成公众号开发设置与AppID配置。确保开发者后台已开启登录授权功能,并在代码中正确填写。

配置参数如下:

参数 说明
AppID 公众号唯一的标识,用于身份验证
Redirect URI 用户授权后重定向的URL
Scope 请求的权限范围,如snsapi_userinfo

配置完成后,将获取到AppSecret,用于后续接口调用。

发起用户登录授权请求

通过wx.login获取code,再调用微信登录接口获取openid与session_key。

wx.login({
  success: function(res) {
    if (res.code) {
      // 发起网络请求
      wx.request({
        url: 'https://api.weixin.qq.com/sns/jscode2session',
        data: {
          appid: 'YOUR_APPID',
          secret: 'YOUR_APPSECRET',
          js_code: res.code,
          grant_type: 'authorization_code'
        },
        success: function(response) {
          console.log('OpenID:', response.data.openid);
          console.log('Session Key:', response.data.session_key);
        }
      });
    } else {
      console.log('登录失败!' + res.errMsg);
    }
  },
  fail: function(err) {
    console.log(err);
  }
});

关键点:code需加密传输,防止泄露。

处理用户信息授权

若需获取用户详细信息,需在发起登录请求时添加snsapi_userinfo权限。

wx.login({
  success: function(res) {
    if (res.code) {
      wx.request({
        url: 'https://api.weixin.qq.com/sns/jscode2session',
        data: {
          appid: 'YOUR_APPID',
          secret: 'YOUR_APPSECRET',
          js_code: res.code,
          grant_type: 'authorization_code'
        },
        success: function(response) {
          // 调用获取用户信息接口
          wx.getUserProfile({
            desc: '用于完善会员资料',
            success: function(info) {
              console.log('昵称:', info.nickName);
              console.log('头像:', info.avatarUrl);
            },
            fail: function(err) {
              console.log(err);
            }
          });
        }
      });
    }
  }
});

注意:getUserProfile需用户明确授权,否则会失败。

错误处理与安全注意事项

常见错误及解决方案:

错误码 原因 解决方法
auth deny 用户拒绝授权 提示用户重新授权
code expired code过期 重新发起登录请求
appid error AppID错误 检查配置是否正确

安全建议:

  • code传输必须使用HTTPS
  • session_key仅用于服务端验证,不可暴露
  • 避免在客户端存储敏感信息

API接口限制说明

根据微信官方文档,jscode2session接口限制如下:

  • 每次请求有效期60秒
  • 每个code只能调用一次
  • 单日每个账号请求限制5000次

超出限制会导致请求失败,需合理控制调用频率。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。