两种机制别混淆

公众号网页授权开放平台网站应用扫码登录
使用场景微信内置浏览器内(H5)授权登录桌面/PC 网站"微信扫码"登录
权限门槛需已认证服务号;个人订阅号不行需已认证开放平台账号(企业,约300元/年)+网站应用审核
授权域名后台"网页授权域名", 需已ICP备案授权回调域名, 需已ICP备案
本地开发测试号即可,免备案无免费测试通道

结论:生产环境两者都免不了 ICP备案。但本地 demo 用测试号 (sandbox) 完全可行。

测试号(Sandbox Test Account)本地调试

  • 入口:mp.weixin.qq.com/debug/cgi-bin/sandboxinfo,微信扫码登录即得 appID/appsecret。
  • 测试号后台"体验接口权限表 → 网页授权获取用户基本信息 → 修改",填授权回调域名。
  • 桌面微信测:填 127.0.0.1;手机测:填电脑局域网IP(如 192.168.1.5)。
  • 授权回调域名不能带端口;但 redirect_uri 里带 :3000 端口是允许的。

OAuth2.0 流程(服务端必须)

浏览器 → open.weixin.qq.com/connect/oauth2/authorize?appid&redirect_uri&scope&state#wechat_redirect
       ← 微信把浏览器 302 回 redirect_uri?code=xxx
服务端 → api.weixin.qq.com/sns/oauth2/access_token  (用 appid+secret+code 换 access_token/openid)
服务端 → api.weixin.qq.com/sns/userinfo              (可选,拿用户信息)

关键:微信服务器从不主动连你的回调,只靠用户浏览器跳转,所以本地 localhost 能跑通;appsecret 只允许在服务端换 token,严禁暴露前端。

坑(Pitfalls)

  • 网页授权必须在微信内置浏览器打开;普通桌面浏览器会报"请在微信客户端中打开链接"。电脑微信测法:把链接发到"文件传输助手"再点开。
  • 测试号 snsapi_userinfo 需先关注测试号(测试号页面有关注二维码),否则授权页报错;snsapi_base 静默授权只拿 openid,无需关注。
  • 2021-10 起"网页授权能力调整":snsapi_userinfo 不再返回头像昵称,以 openid 等基础字段为主。
  • code 5 分钟有效、一次性,换 access_token 失败多数是 code 过期或域名不匹配。
  • 若测试号后台拒绝填 IP/127.0.0.1(个别情况),fallback 用内网穿透(natapp/cpolar 免费隧道域名)。

本地 Demo(已按需删除,可随时重建)

  • 做法:写一个零依赖 Node(>=18) http server 即可,不需要 npm install。根页给出 snsapi_base / snsapi_userinfo 两个入口,/callback 用 appid+secret+code 换 access_token 再拉 userinfo。
  • 步骤:填 APPID/SECRET → node server.js → 微信内置浏览器打开 http://<host>:3000 → 选静默/授权两种 scope。
  • 注意:授权回调域名配置不能带端口,redirect_uri 里的 :3000 允许;appsecret 只在服务端换 token。

本文归档于个人知识库 · 领域:CS & AI · 模块:04 Project_CS_AI/Web