目录
一、扫码登录和微信公众号带参数二维码原理
1.1 什么是扫码登录?
1.2 微信公众号带参数二维码介绍
什么是带参数二维码?
为什么选择临时二维码
扫码登录整体流程
注意事项
二、微信公众号开发-订阅号和服务号介绍和申请
2.1 微信公众号类型介绍
什么是微信公众号?
2.2 订阅号 vs 服务号 详细对比
2.3 为什么扫码登录需要服务号
三、无企业资质怎么开发测试微信公众号全部功能
3.1 开发者测试号(推荐开发阶段使用)
什么是测试号?
3.2 测试号 vs 正式号对比
3.3 测试号配置要点
3.4 项目推荐方案
3.5 从测试号迁移到正式号注意事项
四、本地电脑如何全球访问-内网穿透工具
4.1 什么是内网穿透?
内网与公网的区别
什么是内网穿透
内网穿透的应用场景
4.2 为什么微信开发需要内网穿透?
微信回调机制要求
本地开发的问题
内网穿透的解决方案
4.3 内网穿透工具选择
五、服务号开发文档指南和access_token获取管理
5.1 微信公众平台开发文档概览
5.2 access_token核心概念
什么是access_token
access_token的重要性
编辑
5.3 获取access_token接口详解
接口基本信息
请求示例
响应结果
参数说明
5.4 access_token缓存策略
为什么需要缓存
缓存方案设计
开发常见错误处理
定时刷新实现
六、微信服务号开发-接口配置签名验证详解
6.1 什么是微信服务器验证?
6.2 为什么需要签名验证?
6.3 签名验证原理
验证机制说明
签名计算流程
关键步骤说明
6.4 微信配置验证流程
验证时序图
验证流程说明
6.5 常见验证失败原因
6.6 注意事项
七、服务号带参数二维码开发文档和接口详解
7.1 带参数二维码应用场景
7.2 带参数二维码接口详解
7.3 创建二维码完整流程
步骤1:创建二维码ticket
步骤2:接收响应
步骤3:生成二维码图片
关键参数说明
简介:扫码登录和微信公众号带参数二维码原理
1.1 什么是扫码登录?
-
扫码登录是一种免密登录方式,用户通过微信扫描网页二维码即可完成登录,无需输入账号密码
-
简单说,扫码登录就像刷脸进门,用手机扫一下就能登录,既安全又方便
-
优势:
-
安全性高:基于微信认证,无需在第三方网站输入密码
-
体验流畅:扫码即登录,3秒完成整个流程
-
用户基础大:微信用户超12亿,覆盖面广
-
自动注册:首次扫码自动创建账号,无需填写注册表单
-
1.2 微信公众号带参数二维码介绍
什么是带参数二维码?
-
定义:微信公众平台提供的一种特殊二维码,可以携带自定义的场景参数
-
类型:分为临时二维码(QR_STR_SCENE)和永久二维码(QR_LIMIT_STR_SCENE)
-
场景值:每个二维码可以携带一个唯一的scene_str参数,用于标识不同的业务场景
-
临时二维码 vs 永久二维码
对比项临时二维码永久二维码 有效期 最长30天 永久有效 数量限制 无限制 最多10万个 场景值 字符串或整数 字符串或整数 适用场景 扫码登录、活动推广 渠道推广、员工名片
为什么选择临时二维码
-
安全性:二维码有效期短,过期自动失效
-
无限制:数量不限,每次登录生成新的二维码
-
可追溯:通过scene_str关联登录会话,便于状态管理
扫码登录整体流程

注意事项
-
公众号要求
-
需要认证的服务号,个人订阅号不支持带参数二维码
-
需要在公众平台配置服务器URL和Token
-
二、微信公众号开发-订阅号和服务号介绍和申请
简介:微信公众号开发-订阅号和服务号介绍和申请
2.1 微信公众号类型介绍
什么是微信公众号?
-
访问微信公众平台:https://mp.weixin.qq.com
-
定义:微信公众平台提供的一种账号类型,企业和个人可以通过它与用户进行消息互动
-
入口:用户通过微信App的"发现-订阅号/服务号"查看公众号消息
-
能力:消息推送、自定义菜单、网页授权、支付等
2.2 订阅号 vs 服务号 详细对比
| 注册主体 | 个人/企业均可 | 仅企业/组织 |
| 消息推送频率 | 每天1条 | 每月4条 |
| 消息展示位置 | 折叠在订阅号文件夹 | 直接显示在聊天列表 |
| 微信支付 | 不支持 | 支持 |
| 自定义菜单 | 支持 | 支持 |
| 带参数二维码 | 不支持 | 支持(认证后) |
| 网页授权获取用户信息 | 不支持 | 支持(认证后) |
| 模板消息 | 不支持 | 支持(认证后) |
| 适用场景 | 内容媒体、自媒体 | 企业服务、电商、工具类 |
2.3 为什么扫码登录需要服务号
-
带参数二维码:只有认证的服务号才能生成带参数的二维码
-
用户信息获取:服务号可以通过网页授权获取用户的openid和基本信息
-
接口权限丰富:服务号认证后开放更多高级接口
-
服务号申请流程
-
准备材料
-
企业资质:营业执照(个体工商户也可以)
-
对公账户:用于认证打款验证
-
运营者身份证:需要实名认证
-
认证费用:300元/年(审核费)
-
-
申请步骤
1. 访问微信公众平台:https://mp.weixin.qq.com
2. 点击"立即注册" → 选择"服务号"
3. 填写邮箱、密码,完成邮箱激活
4. 选择"企业"类型,填写企业信息
5. 上传营业执照,填写运营者信息
6. 完成注册,进入公众号后台 -
认证流程
1. 进入公众号后台 → "设置与开发" → "微信认证"
2. 选择认证类型:企业法人/非法人
3. 填写企业信息,上传资质文件
4. 支付300元认证费
5. 等待审核(1-5个工作日)
6. 认证成功后获得高级接口权限
-
三、无企业资质怎么开发测试微信公众号全部功能
简介:无企业资质怎么开发测试微信公众号全部功能
3.1 开发者测试号(推荐开发阶段使用)
什么是测试号?
-
免认证:无需企业资质,个人即可申请
-
接口齐全:拥有大部分高级接口权限,包括带参数二维码
-
限制:仅限开发测试,不能用于生产环境
-
有效期:长期有效,无需年审
-
申请测试号【服务号】
1. 访问:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
2. 使用微信扫码登录
3. 自动获得测试号的appID和appsecret
4. 可直接用于开发调试 -
测试号权限
-
✅ 带参数二维码生成
-
✅ 网页授权获取用户信息
-
✅ 模板消息
-
✅ 自定义菜单
-
✅ 消息接收与回复
-
✅ 素材管理
-
✅ 用户管理
-
❌ 微信支付(需正式服务号)
-
❌ 卡券功能
-
❌ 摇一摇周边
-
3.2 测试号 vs 正式号对比
| 申请门槛 | 个人微信扫码即可 | 企业资质 + 300元/年 |
| 接口权限 | 大部分高级接口 | 全部接口 |
| 微信支付 | ❌ 不支持 | ✅ 支持 |
| 粉丝上限 | 100人 | 无限制 |
| 消息群发 | 不支持 | 支持 |
| 自定义菜单 | ✅ 支持 | ✅ 支持 |
| 网页授权 | ✅ 支持 | ✅ 支持 |
| 带参二维码 | ✅ 支持 | ✅ 支持 |
| 适用场景 | 开发测试 | 生产环境 |
3.3 测试号配置要点
-
接口配置信息
URL:填写你的服务器地址(需公网可访问)
Token:自定义字符串,用于验证消息来源
配置流程:
1. 先部署好服务器验证接口
2. 填写URL和Token
3. 点击提交,微信会发送验证请求
4. 服务器正确响应echostr即配置成功 -
JS接口安全域名【暂时不需要】
用于:网页开发时调用微信JS-SDK
格式:只填域名,不带http://或https://
示例:your-domain.com
注意:测试号可填写任意域名,正式号需验证域名所有权 -
网页授权域名【暂时不需要】
用于:获取用户openid和基本信息
配置:与JS安全域名类似,填写回调域名
测试号优势:无需上传验证文件
3.4 项目推荐方案
| 开发测试 | 微信测试号 | 免费、接口齐全、申请简单 |
| 生产上线 | 认证服务号 | 正式环境必须使用认证服务号 |
3.5 从测试号迁移到正式号注意事项
1. 配置迁移
– 重新配置服务器URL和Token
– 配置JS安全域名(需上传验证文件)
– 配置网页授权域名
2. 代码调整
– 替换appID和appSecret
– 注意正式号的接口频率限制更严格
3. 用户数据
– 测试号和正式号的openid不同
– 用户需要重新关注正式号
– 无法迁移测试号的用户数据
4. 功能验证
– 正式号上线前做完整功能测试
– 特别注意支付等敏感功能
四、本地电脑如何全球访问-内网穿透工具
简介:为什么要用内网穿透-如何选择工具
4.1 什么是内网穿透?
内网与公网的区别
-
公网IP:能够被互联网上任何设备直接访问的IP地址
-
内网IP:只能在局域网内访问的私有IP(如192.168.x.x、10.x.x.x)
-
NAT转换:路由器将多个内网设备映射到一个公网IP
什么是内网穿透
-
定义:将内网服务暴露到公网,使其可以被外部访问的技术
-
原理:通过第三方服务器作为中转,建立内网到公网的隧道
-
别名:也叫反向代理、端口映射、NAT穿透
内网穿透的应用场景
1. 微信公众号开发:微信服务器需要回调开发者本地服务
2. 远程调试:在外网访问家里或公司的内网设备
3. 临时分享:向客户展示本地开发的网站
4. 物联网设备:远程控制家中的智能设备
5. 游戏联机:搭建本地游戏服务器供朋友访问
4.2 为什么微信开发需要内网穿透?
微信回调机制要求
-
公网可访问:微信服务器在接收到扫码事件后,需要回调开发者的服务器
-
HTTPS协议:微信要求回调地址必须是HTTPS(测试号可以用HTTP)
-
域名验证:需要在微信公众平台配置服务器URL
本地开发的问题
-
本地服务通常运行在localhost:8080,外网无法访问
-
家用宽带一般是动态IP,且运营商封禁了80/443端口
-
即使有公网IP,配置防火墙和SSL证书也很麻烦
内网穿透的解决方案
本地服务(localhost:8080)
↓
内网穿透客户端
↓ 建立隧道
穿透服务器(云端)
↓ 分配公网域名
https://abc123.ngrok.io
↓
微信服务器可以访问
4.3 内网穿透工具选择
-
主流工具对比
工具名称费用速度稳定性协议支持适用场景 ngrok 免费版+付费版 较慢(国外服务器) 高 HTTP/HTTPS/TCP 国际项目,追求稳定 花生壳 免费版+付费版 快(国内服务器) 高 HTTP/HTTPS/TCP 国内项目,长期使用 natapp 免费版+付费版 快(国内服务器) 中 HTTP/HTTPS/TCP 国内项目,性价比高 -
推荐方案:花生壳
-
花生壳安装与使用:跟着官方文档认证和步骤【经常更新,也可以选择其他】
-
地址:贝锐花生壳内网穿透|ddns动态域名解析|端口映射工具-贝锐花生壳官网
-
验证:启动微服务项目,通过域名可以访问接口即可
-
-
高频问题:网络变化导致访问不了
-
内网IP变动,删除旧的域名映射,重新配置即可
-
-
生产环境部署建议
-
内网穿透仅限开发测试
⚠️ 重要提醒:
– 内网穿透不适合生产环境使用
– 存在安全风险和稳定性问题
– 免费服务可能随时停止 -
生产环境部署方案
1. 购买云服务器(阿里云/腾讯云/AWS)
2. 申请域名并备案
3. 配置SSL证书(Let's Encrypt免费证书)
4. 使用Nginx做反向代理
5. 在微信公众平台配置正式域名
-
-
其他内网穿透工具快速上手
-
ngrok(国际版)地址:https://ngrok.com
-
natapp(国内版)地址:https://natapp.cn
-
五、服务号开发文档指南和access_token获取管理
简介: 服务号开发文档指南和access_token获取管理
5.1 微信公众平台开发文档概览
-
官方文档地址 微信开放文档 / 服务号-指南 / 开发指南 / 概述
5.2 access_token核心概念
什么是access_token
-
定义:调用微信API的全局唯一接口调用凭据
-
有效期:7200秒(2小时)
-
获取限制:每日2000次调用上限
-
作用范围:几乎所有微信接口都需要access_token
access_token的重要性
5.3 获取access_token接口详解
接口基本信息
请求方式:GET 请求地址:https://api.weixin.qq.com/cgi-bin/token
请求参数: – grant_type:固定值 client_credential – appid:公众号的唯一标识 – secret:公众号的appsecret
请求示例
curl "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx1b61XXXXXXX8421&secret=5c0d5a646b4fXXXXXXXXXe9676"
响应结果
// 成功响应 { "access_token": "68_D6vP8zFxGXXXXXXXXXXXXXXXXXXXXXXXX", "expires_in": 7200 }
// 失败响应 { "errcode": 40013, "errmsg": "invalid appid" }
参数说明
| grant_type | string | 是 | 固定值client_credential |
| appid | string | 是 | 第三方用户唯一凭证 |
| secret | string | 是 | 第三方用户唯一凭证密钥 |
| access_token | string | – | 返回的接口调用凭证 |
| expires_in | int | – | 凭证有效时间,单位:秒 |
5.4 access_token缓存策略
为什么需要缓存
⚠️ 不缓存的严重后果: 1. 每次调用接口都获取access_token,会快速达到每日2000次上限 2. 频繁请求会导致接口响应变慢 3. 同时存在多个有效access_token可能导致API调用失败 4. 浪费服务器资源和网络带宽
缓存方案设计

开发常见错误处理
| 40001 | access_token无效或已过期 | 刷新access_token后重试 |
| 40013 | 不合法的AppID | 检查配置的appid是否正确 |
| 40164 | 调用接口的IP地址不在白名单中【非沙箱环境】 | 请在接口IP白名单中进行设置 |
| 40125 | 不合法的 secret | 请检查 secret 的正确性,避免异常字符,注意大小写 |
定时刷新实现
@Component
public class AccessTokenRefreshTask {
@Autowired
private WechatAccessTokenService accessTokenService;
/**
* 定时刷新access_token
* 每小时执行一次(7200秒有效期,提前刷新很安全)
*/
@Scheduled(cron = "0 0 * * * ?")
public void refreshAccessToken() {
try {
log.info("开始定时刷新access_token");
String accessToken = accessTokenService.getAccessToken();
log.info("定时刷新access_token成功: {}",
accessToken.substring(0, 10) + "…");
} catch (Exception e) {
log.error("定时刷新access_token失败", e);
// 发送告警通知
}
}
}
六、微信服务号开发-接口配置签名验证详解
简介:微信服务号开发-接口配置签名验证详解
6.1 什么是微信服务器验证?
-
核心定义:微信服务器验证是微信公众号在配置服务器URL时的安全验证机制
-
简单说,就像一个"暗号"验证过程,确保接收消息的服务器是你本人配置的,而不是别人冒充的
-
验证过程:
-
微信服务器:我要验证你的服务器,给你发送几个参数(signature、timestamp、nonce、echostr)
-
你的服务器:收到参数后,用Token按规则计算签名,如果和给你发的signature一致,就返回echostr
-
微信服务器:收到echostr后,确认验证通过,配置成功
-
6.2 为什么需要签名验证?
-
需求背景
-
微信公众号需要接收用户消息和事件推送(如关注、扫码、点击菜单等)
-
如果不验证服务器身份,任何人都可以伪造服务器地址接收消息
-
可能导致用户信息泄露、消息被劫持等安全问题
-
6.3 签名验证原理
验证机制说明
-
微信服务器和你的服务器共享一个密钥(Token)
-
微信服务器用Token和其他参数生成签名发给你
-
你的服务器用相同算法计算签名,如果一致则验证通过
-
打个比方:就像两个人约定了一个加密算法,只有双方都知道密钥和算法,才能互相验证身份
签名计算流程

关键步骤说明
参数排序:将Token、timestamp、nonce三个参数按字典序排序
字符串拼接:将排序后的三个参数拼接成一个字符串
SHA1加密:对拼接后的字符串进行SHA1加密
签名对比:将加密后的结果与微信发送的signature对比
返回结果:一致则返回echostr,否则返回error
6.4 微信配置验证流程
验证时序图

验证流程说明
-
步骤1:管理员在微信公众平台填写服务器配置(URL、Token)
-
步骤2:点击提交后,微信服务器立即发送GET请求验证
-
步骤3:请求包含4个参数:signature(签名)、timestamp(时间戳)、nonce(随机数)、echostr(随机字符串)
-
步骤4:你的服务器收到请求后,读取配置中的Token
-
步骤5:将Token、timestamp、nonce按字典序排序
-
步骤6:拼接成字符串后进行SHA1加密
-
步骤7:将计算出的签名与微信发送的signature对比
-
步骤8:一致则返回echostr,微信显示"配置成功";否则返回error,显示"验证失败"
6.5 常见验证失败原因
-
URL不可访问
-
问题表现:微信提示"请求URL超时"
-
原因分析:服务器未启动、防火墙拦截、内网穿透未配置
-
解决方案:确保服务器运行正常,检查端口开放,配置内网穿透
-
-
Token不匹配
-
问题表现:签名验证失败,微信提示"配置失败"
-
原因分析:代码中的Token与微信后台配置的Token不一致
-
解决方案:确保application.yml中的Token与微信后台一致
-
-
签名算法错误
-
问题表现:签名验证失败
-
原因分析:排序逻辑错误、拼接方式错误、加密算法错误
-
解决方案:严格按照微信文档实现:排序→拼接→SHA1加密
-
6.6 注意事项
-
Token保管:Token是验证密钥,不要泄露,建议使用复杂字符串
-
大小写敏感:SHA1加密后的结果是小写,对比时注意大小写
-
编码问题:拼接字符串时使用UTF-8编码
七、服务号带参数二维码开发文档和接口详解
简介: 服务号带参数二维码开发文档和接口详解
7.1 带参数二维码应用场景
1. 用户登录验证 – PC网页展示二维码 – 用户微信扫码确认登录 – 服务端接收扫码事件,完成登录
2. 账号绑定 – 业务系统生成绑定二维码 – 用户扫码关联微信账号 – 实现微信快捷登录
3. 线下活动签到 – 生成活动签到二维码 – 用户扫码签到 – 自动记录签到信息
4. 推广统计 – 不同渠道生成不同二维码 – 扫码时记录来源渠道 – 统计推广效果
7.2 带参数二维码接口详解
-
接口文档: 微信开放文档 / 服务号-服务端 / 服务号二维码 / 带参二维码 / 生成带参数的二维码
-
核心接口说明
接口名称请求方式地址用途 创建二维码ticket POST /cgi-bin/qrcode/create 生成二维码凭证 换取二维码 GET /cgi-bin/showqrcode 通过ticket获取图片 -
详细交互时序图

7.3 创建二维码完整流程
步骤1:创建二维码ticket
POST https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=ACCESS_TOKEN
// 临时二维码请求体 { "expire_seconds": 120, "action_name": "QR_STR_SCENE", "action_info": { "scene": { "scene_str": "uuid_scene_1234567890" } } }
// 永久二维码请求体 { "action_name": "QR_LIMIT_STR_SCENE", "action_info": { "scene": { "scene_str": "user_bind_12345" } } }
步骤2:接收响应
{ "ticket": "gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyX0c4V…", "expire_seconds": 120, "url": "http://weixin.qq.com/q/02_G8W-…" }
步骤3:生成二维码图片
GET https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
关键参数说明
| expire_seconds | int | 有效时间,最长30天(2592000秒),仅临时二维码需要 |
| action_name | string | QR_STR_SCENE(临时)或QR_LIMIT_STR_SCENE(永久) |
| scene_str | string | 场景值字符串,长度限制1-64字符 |
| ticket | string | 二维码ticket,凭此换取图片 |
| url | string | 二维码图片解析后的地址,可直接生成二维码 |




