微信小程序生态6—微信公众号授权登录(适用于H5小程序)

一、实现步骤

1 第一步:用户同意授权,获取code

2 第二步:通过code换取网页授权access_token

3 第三步:刷新access_token(如果需要)

4 第四步:拉取用户信息(需scope为 snsapi_userinfo)

5 附:检验授权凭证(access_token)是否有效

二、准备材料

一个服务号(已认证),确保网页授权权限已开通

三、实现步骤

1. 点击修改,跳转到公众号设置页,此处需要添加一个域名文件校验

2. 通过authorize获取的code

调用open.weixin.qq.com/connect/oau... 我这里写了一个简单HTML,用来发起调用接口:

xml 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>Document</title>
</head>
<style>
</style>
<body>
<div id="container">
</div>
<script>
    window.appId = `${appId}`
   //注意:此处redirect_uri需要使用encodeURIComponent(该方法浏览器自带)转义
    let local = "http://xxx"
    // 跳转到授权页面
    window.location.href =
            "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
            window.appId +
            "&redirect_uri=" +
            encodeURIComponent(local) +
            "&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
</script>
</body>
</html>

3. 参数说明

snsapi_base与snsapi_userinfo属于微信网页授权获取用户信息的两种作用域

  • snsapi_base只能获取access_token和openId

  • snsapi_userinfo可以获取更详细的用户资料,比如头像、昵称、性别等,该种形式会唤醒授权页面

4. 调用接口获取access_token

api.weixin.qq.com/sns/oauth2/...

返回值如下

json 复制代码
{
    "access_token":"accesstoken",
    "refresh_token":"refreshtoken",
    "openid":"openId",
    "scope":"snsapi_userinfo",
    "expires_in":7200
 }

5. 根据accessToken和openId查询用户信息

调用api.weixin.qq.com/sns/userinf...

返回值如下

json 复制代码
{
    "country":"",
    "province":"",
    "city":"",
    "openid":"openid",
    "sex":0,
    "nickname":"sum墨",
    "headimgurl":"xxx",
    "language":"",
    "privilege":[]
  }

三、常见错误码发生情况

json 复制代码
{
    "errcode":40029,
    "errmsg":"invalid code, rid: 620e3db2-410d5515-117f31ac"
 }

这种问题一般都发生在code上,要检查code是不是有值并且是不是重复调用了

相关推荐
江畔柳前堤3 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
90后的晨仔5 小时前
从 H5 到 uni-app:一篇写给前端小白的"翻译指南"
前端·vue.js·前端框架
陈随易5 小时前
moon,apt和yum之外linux系统命令安装新选择
前端·后端·程序员
IT小盘6 小时前
13-企业Prompt模板-角色任务约束与输出格式
java·前端·prompt
码事漫谈6 小时前
当单库日增 4.5TB,异构实时同步还能稳得住吗?
后端
徐小夕6 小时前
开源!我用SQLite + DuckDB打造了一款可视化AI问数平台
前端·算法·github
leslie1187 小时前
babel笔记
前端
用户059540174467 小时前
Redis 记忆存储踩坑实录:一个并发写入 Bug 让我排查了 4 小时
前端·css
小徐_23338 小时前
Wot UI 2.3.0 发布:二维码组件来了,Open Wot 与 wot-starter 同步更新
前端·微信小程序·uni-app
kyriewen8 小时前
Claude自己跑出去hack了3家公司——我为什么还在用它写代码
前端·ai编程·claude