news 2026/2/28 23:10:14

通过授权获取用户 open_id

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
通过授权获取用户 open_id

静默授权获取openid确实主要是前端页面操作,后端只需处理最后一步的code换openid。具体流程如下:

完整操作流程

第一步:微信公众号后台配置(管理员操作)

  1. 配置授权回调域名

    • 登录公众平台 → 设置与开发 → 公众号设置 → 功能设置

    • 找到网页授权域名设置项

    • 填写你的域名(不要加http://,如yourdomain.com

  2. 上传校验文件

    • 点击下载微信提供的TXT验证文件(如MP_verify_xxxxxx.txt

    • 将该文件上传至服务器根目录(确保能访问http://yourdomain.com/MP_verify_xxxxxx.txt

    • 保存配置,等待审核通过

第二步:前端实现静默授权(核心操作)

整个授权流程需要在微信浏览器内完成。

1. 准备结果页面

创建一个授权回调页面(如/auth/callback),用于接收微信返回的code:

HTML

预览

复制

<!-- callback.html --> <!DOCTYPE html> <html> <head> <title>授权中...</title> </head> <body> <script> // 页面加载时获取code function getCode() { const url = window.location.href; const code = url.split('code=')[1]?.split('&')[0]; if (code) { // 将code传给后端 fetch('/api/getOpenid', { method: 'POST', body: JSON.stringify({ code }) }).then(res => { // 处理成功后的逻辑,如跳转到目标页面 window.location.href = '/home'; }); } else { alert('授权失败,请重试'); } } getCode(); </script> </body> </html>
2. 构造授权URL并跳转

在用户需要获取openid时(如点击"绑定微信"按钮),前端构造授权链接并跳转:

JavaScript

复制

// 对回调地址进行URL编码 function urlencode(str) { return encodeURIComponent(str) .replace(/!/g, '%21') .replace(/'/g, '%27') .replace(/\(/g, '%28') .replace(/\)/g, '%29') .replace(/\*/g, '%2A') .replace(/%20/g, '+'); } // 获取openid的函数 function getWechatOpenid() { const appid = 'YOUR_APPID'; // 公众号AppID const redirectUri = urlencode('https://yourdomain.com/auth/callback'); // 结果页面地址 const scope = 'snsapi_base'; // 静默授权 const state = '123'; // 可选,用于传递自定义参数 const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirectUri}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`; // 如果是微信浏览器内,直接跳转 if (isWechatBrowser()) { window.location.href = authUrl; } else { // 非微信环境:生成二维码或提示复制链接 alert('请使用微信扫一扫或复制链接到微信打开'); } } // 判断是否为微信浏览器 function isWechatBrowser() { return /MicroMessenger/i.test(navigator.userAgent); }
3. 触发授权

在页面中添加触发按钮:

HTML

预览

复制

<button onclick="getWechatOpenid()">绑定微信</button>

第三步:后端处理code换取openid

前端获取到code后,需由后端服务器调用微信接口换取openid:

java

复制

// Java示例 public String getOpenId(String code) { String url = "https://api.weixin.qq.com/sns/oauth2/access_token?" + "appid=APPID&secret=APPSECRET&code=" + code + "&grant_type=authorization_code"; // 发起HTTP GET请求 String result = restTemplate.getForObject(url, String.class); JSONObject json = JSON.parseObject(result); return json.getString("openid"); // 返回openid }

关键参数

  • APPID:公众号AppID

  • APPSECRET:公众号AppSecret

  • code:前端传来的临时凭证(有效期5分钟,只能使用一次)

重要注意事项

1.域名必须完全一致

  • 配置的授权域名必须与redirect_uri的域名完全一致

  • 不支持子域名通配,如需多个域名需分别配置

2.URL编码要求

  • redirect_uri必须经过严格URL编码,否则微信会提示"redirect_uri参数错误"

  • 如果回调地址包含hash路由(如/#/pages/bind),需对整个URL编码

3.环境判断

  • 必须在微信内置浏览器中打开授权链接

  • PC端可将链接生成二维码,引导用户微信扫码

4.静默授权特点

  • scope=snsapi_base时,用户无感知,页面直接跳转

  • 只能获取openid,无法获取昵称、头像等信息

  • 用户无需关注公众号也可获取openid

5.Token管理

  • 返回的access_token与普通access_token不同,无需缓存

  • 此token仅用于获取用户信息,2小时有效期,不限制调用次数

常见问题排查

表格

复制

问题原因解决方案
redirect_uri参数错误域名未配置或URL编码不正确检查授权域名配置,重新编码回调地址
无法获取code在非微信浏览器打开确保在微信内访问,或使用二维码引导
提示scope参数错误或没有scope权限使用了snsapi_userinfo但未认证服务号需微信认证后才可使用userinfo
code已失效code超过5分钟或已被使用重新发起授权流程

整个流程核心是前端负责跳转和获取code,后端负责换取openid,分工明确且安全。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/19 5:40:04

LangFlow Baidu CFC国产化替代方案测试

LangFlow Baidu CFC国产化替代方案测试 在AI应用开发日益普及的今天&#xff0c;如何让非技术背景的业务人员也能参与智能系统的设计&#xff0c;正成为企业落地大模型的关键挑战。传统基于代码的LangChain开发模式虽然灵活&#xff0c;但对开发者要求高、协作成本大&#xff0…

作者头像 李华
网站建设 2026/2/25 11:20:11

LangFlow CRD自定义资源定义提案

LangFlow CRD 自定义资源定义提案 在企业加速拥抱大语言模型&#xff08;LLM&#xff09;的今天&#xff0c;一个现实问题日益凸显&#xff1a;数据科学家能在 LangFlow 中快速拖拽出一个智能客服工作流原型&#xff0c;却往往需要等待数天甚至更久才能将其部署到生产环境。这中…

作者头像 李华
网站建设 2026/2/20 11:13:20

Minio开始收费了?别慌,这5种免费的分布式文件系统更香!

前言 最近&#xff0c;不少技术圈的朋友都在讨论一个话题&#xff1a;Minio是不是开始收费了&#xff1f; 这背后其实涉及到一个更深刻的问题——开源许可证的商业化边界。 有些小伙伴在工作中可能已经遇到了这样的困惑&#xff1a;公司法务审查后&#xff0c;认为Minio的AGPLv…

作者头像 李华
网站建设 2026/2/28 18:08:59

解锁科研“开题秘籍”:书匠策AI开题报告功能,开启学术探索新征程

在科研的浩瀚宇宙中&#xff0c;开题报告宛如一颗启明星&#xff0c;为整个研究项目指引方向。它不仅是研究者向学术界展示研究计划的重要窗口&#xff0c;更是确保研究具有科学性、创新性和可行性的关键环节。然而&#xff0c;撰写一份高质量的开题报告并非易事&#xff0c;从…

作者头像 李华
网站建设 2026/2/20 1:01:52

安全多方计算获分布式计算最高荣誉,探索隐私保护核心机制

安全多方计算&#xff1a;在保护隐私的前提下协同计算 安全多方计算&#xff08;MPC&#xff09;是一种计算范式&#xff0c;允许多个参与方在不泄露任何私人信息的情况下共同计算一个聚合函数[citation:5]。例如&#xff0c;多方可以在不透露各自具体薪资的情况下&#xff0c;…

作者头像 李华
网站建设 2026/2/26 8:14:50

科研开题的“智慧锦囊”:书匠策AI开题报告功能,解锁学术新姿势

在科研这片广袤无垠的天地里&#xff0c;每一位科研工作者都怀揣着探索未知、追求真理的梦想。而开题报告&#xff0c;就像是这场逐梦之旅的“导航图”&#xff0c;为我们清晰地勾勒出研究的方向、目标与路径。然而&#xff0c;撰写一份高质量的开题报告&#xff0c;却绝非易事…

作者头像 李华