微信小程序 AppID 信息记录
Info
- 1024 微应用
wx161b6221791a7340 473e074ec0cb907b4ee34d99319d15ae
- 小招
wx1fcf825366c41614
- only
wx2de5f627b0461a70
- AiCamera Photo
wx8adbdb6a661538f6
- 实用功能大全
`wx8e25bd4ee4bff7e9
- 还没想好做啥
wx3ae32d7fae071a15
AppID 是什么,在哪里看
AppID 是小程序在微信开放平台的唯一标识,形如 wx 加 16 位十六进制字符,注册小程序时由微信生成,之后不可修改。在微信公众平台后台的「开发 - 开发管理 - 开发设置」页面可以看到,同一页面下方还有 AppSecret。
两者的定位完全不同,这个区别决定了它们该怎么存:
- AppID 是公开信息。它会写进
project.config.json,出现在小程序包里,也会出现在分享链接、跳转参数里,任何人都能拿到。不需要保密。 - AppSecret 是凭据,等同于密码。它只能存在服务端,一旦泄露别人就能用你的身份调用微信服务端接口(发模板消息、查用户信息、扣代金券等)。
AppSecret 在后台只在生成的那一刻完整显示一次,之后只能重置。所以拿到后要立刻存进服务端的密钥管理里,不要写进任何前端代码或提交到 git 仓库。如果不小心提交了,光删掉文件没用,git 历史里还在,必须去后台点「重置」作废旧的那一份。
AppID 在项目里的配置位置
小程序原生项目里,AppID 写在项目根目录的 project.config.json:
{
"appid": "wx161b6221791a7340",
"projectname": "my-app",
"setting": {
"urlCheck": true,
"es6": true
}
}
微信开发者工具是靠这个字段决定当前项目属于哪个小程序的。改了它相当于换了个小程序,云开发环境、真机预览的权限都会跟着变。
需要多人协作或者多环境切换时,project.config.json 里的 appid 就成了冲突源——每个人本地用的测试 AppID 不同,每次拉代码都要改回来。微信为此提供了 project.private.config.json,字段和主文件一致但优先级更高,且默认在 .gitignore 里:
{
"appid": "wxTestAppIdForLocalDev",
"setting": {
"urlCheck": false
}
}
这样正式的 AppID 留在主配置里,本地各自的覆盖走私有配置,互不干扰。
登录流程里 AppID 和 AppSecret 各自的角色
小程序登录是 AppID 和 AppSecret 分工最典型的场景。流程分三步:
// 1. 小程序端:拿一次性 code
wx.login({
success(res) {
// res.code 有效期 5 分钟,且只能用一次
wx.request({
url: 'https://your-server.com/api/login',
method: 'POST',
data: { code: res.code },
success(r) {
// 服务端换到的自定义登录态
wx.setStorageSync('token', r.data.token);
},
});
},
});
// 2. 服务端:用 code + AppID + AppSecret 换 openid 和 session_key
// AppSecret 只出现在这一层,永远不下发给客户端
const url = 'https://api.weixin.qq.com/sns/jscode2session';
const res = await fetch(
`${url}?appid=${APPID}&secret=${APPSECRET}&js_code=${code}&grant_type=authorization_code`,
);
const { openid, session_key, unionid } = await res.json();
第三步是服务端自己生成一个 token 返回给小程序,后续请求带这个 token 而不是 openid。直接把 openid 当登录凭据下发是常见的安全漏洞——openid 是稳定不变的字符串,一旦泄露就能永久冒充。
session_key 也不能下发到客户端,它用于解密 wx.getUserProfile 等接口返回的加密数据,属于服务端资产。
openid 与 unionid 的区别
这两个 ID 都和 AppID 相关,容易混:
openid是「用户 + 某个小程序/公众号」维度的标识。同一个人在你的两个小程序里openid不同。unionid是「用户 + 某个开放平台账号」维度的标识。把多个小程序、公众号绑定到同一个微信开放平台账号下之后,同一个人在这些应用里拿到的unionid是同一个。
所以上面记录的这几个 AppID 如果想做打通账号体系,前提是它们都绑定到了同一个开放平台账号,否则拿不到 unionid,只能各自独立的用户体系。
常见的 AppID 相关报错
invalid appid:project.config.json 里的 appid 和实际不符,或者用了别人小程序的 AppID 但当前微信号不在其开发者列表里。
Error: 未找到 app.json 对应的 appid:project.config.json 缺失或 JSON 格式有误(多了尾逗号、注释等)。开发者工具对这个文件的 JSON 解析是严格模式。
真机预览白屏但工具正常:一般是服务器域名没在后台「开发设置 - 服务器域名」里配置。开发者工具默认可以勾选「不校验合法域名」绕过,真机不行。
40125 invalid appsecret:AppSecret 被重置过但服务端还在用旧的。重置后要同步更新所有环境的配置。
code been used:wx.login 的 code 被用了两次。一般是服务端接口做了重试,或者前端并发调了两次登录。code 严格一次性,重试必须重新走 wx.login。

还没有留言,来发表第一条吧~