上一篇 下一篇 分享链接 返回 返回顶部

微信扫码登录失效?Scdn回调地址配置修复指南

发布人:茄子 发布时间:2025-08-12 14:22 阅读量:169

昨天排查了个贼典型的问题:用户微信扫码登录突然大面积报错,后台日志狂刷“redirecturi参数错误”。折腾半天发现是Scdn加速域名变更后,微信开放平台回调地址没同步更新。如果你也遇到扫码登录突然抽风,大概率是回调配置的锅。

问题现象:扫码后卡在空白页或报错

用户反馈点击微信登录按钮,扫完码要么白屏,要么直接弹“授权失败”。抓包看到微信压根没把授权码回调到我们服务器。关键报错就这两类:

错误码10003:redirecturi域名未在公众号配置(实际是企业微信应用)

错误码40164:回调地址IP不在白名单(Scdn节点IP被微信拦截)

根因定位:Scdn域名与微信配置脱节

微信开放平台对回调地址有三重验证

1. 必须HTTPS协议(http直接阻断)

2. 域名完全匹配(多一个字母都不行)

3. 顶级域名备案主体一致(子公司域名要单独配置)

问题出在:我们业务接入了Scdn加速,对外服务域名从api.xxx.com切到了scdn.xxx.xx,但微信后台回调地址还挂着老域名。更坑的是Scdn会自动切换节点IP,新IP没加进微信IP白名单,直接触发40164。

手把手修复:四步搞定回调配置

第一步:确认当前生效域名

在Scdn控制台找到“加速域名”配置,复制CNAME指向的域名(比如scdn.xxx.xx)。重点:别用源站IP,微信只认域名。

第二步:修改微信开放平台配置

登录微信开放平台 → 进入应用 → 开发设置 → 授权回调域。注意:这里填的是根域名!比如回调地址是https://scdn.xxx.xx/auth/callback,只需要填scdn.xxx.xx(不带https和路径)

第三步:追加Scdn节点IP白名单

在微信开放平台 → 基本配置 → 公众号IP白名单(企业微信同理)。把Scdn的全部回源IP段加进去。如果不知道具体IP段,找Scdn厂商要“节点IP地址列表”,通常有txt文件提供。

第四步:检查Nginx路由配置

重点检查location /auth/callback 的路由规则。遇到过有团队配置了rewrite规则把路径截断,导致微信回调时404。建议直接写死:

location = /auth/callback { proxypass http://backendservice; }

避坑指南:这些细节能救急

场景1:本地开发调试报错

微信不允许localhost做回调。解决方案:改hosts把test.xxx.com指向127.0.0.1,然后在微信测试号配置test.xxx.com。记得本地nginx配https证书(可用mkcert自签)

场景2:多环境共用应用

微信回调域最多配三个,不够用?在业务层做域名转发:让微信统一回调到gateway.xxx.com,由网关根据参数路由到具体服务。代码示例:

if (request.path == '/wxcallback') { let env = request.query.env; proxypass http://${env}-service; }

场景3:Scdn开启缓存导致回调失败

/auth/callback 路径必须关闭缓存!在Scdn控制台添加规则:路径完全匹配 /auth/callback → 缓存配置选“不缓存”。否则可能拿到过期的授权code。

验证方案:用curl模拟全流程

别依赖前端页面测试,直接终端操作:

1. 生成扫码链接: curl 'https://api.weixin.xx/connect/qrconnect?appid=YOURAPPID&redirecturi=ENCODEURL(scdn.xxx.xx/callback)&scope=snsapilogin'

2. 手机扫码后,在Scdn访问日志搜“/callback?code=”。看到200状态码且返回了我们的登录页才算通。

3. 如果没日志?上tcpdump抓包: tcpdump -i eth0 host scdn.xxx.xx and port 443 -w wx_callback.pcap

完事后记得把Scdn配置和微信后台截图存档。下次再出问题,先对比这两处有没有被改动过。有团队吃过亏:运维半夜扩容加了新IP,忘更白名单,早上登录直接崩了。

按这个流程处理完,扫码登录基本能秒恢复。核心就一句话:微信回调域、Scdn加速域名、Nginx路由,这三处必须保持字符串完全一致。差个斜杠或者换行符都够你查半天的。

目录结构
全文