JS接口安全域名必须与location.origin完全一致(协议+域名+端口),不加路径或参数;需上传校验文件MP_verify_*.txt至根目录并确保HTTPS可访问;url参数须去除hash后传入,且不可编码。

微信公众号后台必须填对“JS接口安全域名”
不是随便填个域名就能用,必须和你实际访问页面的 location.origin 完全一致(协议 + 域名 + 端口),且不能带路径或参数。
常见错误现象:invalid signature 或 config:invalid url domain,90% 是因为这里填错了。
- 例如你的 H5 页面地址是
https://wl.2020yx.cn/ccc/index.html,那后台只填wl.2020yx.cn即可(不加https://,不加路径) - 如果用了子域名(如
h5.example.com),主域名example.com不自动生效,必须单独添加 - 开发阶段用本地 IP(如
http://192.168.1.100:8080)无法配置——微信不支持 IP 地址,必须上真实备案域名 - 填完后需下载校验文件(
MP_verify_*.txt),并确保能通过https://你的域名/MP_verify_*.txt直接访问到(HTTP 200)
uni-app 项目里不能漏掉域名校验文件
这个 .txt 文件不是摆设,微信会主动 GET 请求它来验证你是否真有该域名控制权。漏传或路径不对,后台配置就无效。
实操建议:
- 把下载好的
MP_verify_*.txt放在 uni-app 构建后的根目录下(即dist/build/h5/输出目录的最外层) - 如果你用 Nginx,确认
location /能直接命中该文件,别被 rewrite 规则拦截 - 检查响应头:必须返回
Content-Type: text/plain,否则微信判定失败 - 不要放在
static或assets下——这些路径通常被构建工具处理或路由拦截,不一定能裸露访问
页面 URL 必须剥离 hash 才能正确签名
wx.config 的 url 参数若包含 #,签名会失败,因为微信服务端校验的是不含 hash 的原始 URL。
正确写法必须是:
const url = window.location.href.split('#')[0]
而不是 window.location.href 或 window.location.origin + window.location.pathname(后者会丢掉 query 参数)。
特别注意:
- SPA 路由(如
/user?id=123#/profile)——取split('#')[0]后是/user?id=123,这是对的 - 如果 URL 本身没
#,split('#')[0]就是原串,安全 - 千万别用
encodeURIComponent(url)包一层再传给后端——后端签名逻辑要求原始 URL,编码后会导致签名不匹配
开发环境调试时容易忽略的两个硬性限制
本地 localhost 或内网 IP 永远无法通过微信 JS-SDK 校验,这是平台级限制,不是配置问题。
真实调试路径只有两条:
- 用 ngrok / localtunnel 等工具把本地服务映射成公网 HTTPS 域名,并把这个域名填进公众号后台
- 部署测试机(哪怕是最简的 VPS + Nginx),用备案域名指向它,所有 JS-SDK 接口才可能正常初始化
另外,debug: true 只在 PC 微信客户端或微信开发者工具里生效,真机上弹不出 alert,别依赖它判断 config 是否成功——要用 ready 和 error 回调配合日志确认。



















