微信登录配置中最让人困惑的往往不是申请 AppID,而是回调域名到底应该怎么填。填成带 http 的完整地址、带上端口号、加上回调路径,或者把一级域名与二级域名混在一起,都会导致二维码扫码成功后无法正常跳回网站,甚至直接提示 redirect_uri 参数错误。这个字段的填写规则并不复杂,但必须严格按照微信开放平台的要求来。

一、回调域名在哪里填,基本格式是什么
网站应用接入微信登录时,需要先登录微信开放平台,进入管理中心,找到已经创建或正在审核的网站应用。在应用详情页中有一个字段叫授权回调域,这里并不是填写完整的回调地址,而是只填写域名部分。例如真正接收微信回调的地址是 https://www.ipipp.com/login/callback,后台授权回调域只需要填 www.ipipp.com。
微信对授权回调域的限制非常明确:不能包含 http:// 或 https:// 协议头,不能带端口号,不能以斜杠结尾,也不能填写具体路径。比如 https://www.ipipp.com:8080/callback 这种写法一定无法通过校验。多个域名需要接入时,可以用分号隔开,例如 www.ipipp.com;m.ipipp.com。不要使用通配符 *.ipipp.com,微信目前并不支持这种配置方式。
另外,域名必须先完成 ICP 备案。未备案的域名通常无法在开放平台保存,或者在用户实际登录时被拦截。备案周期一般较长,建议在项目立项时就同步准备。完成备案后,如果网站使用了 CDN 或 WAF,还要确保回调地址在公网能直接访问,避免因为安全策略把微信服务器误拦截。
二、OAuth2.0 登录地址如何拼接
网站应用微信登录属于标准的 OAuth2.0 授权码模式。用户点击登录后,浏览器会跳转到微信的扫码页面,核心请求地址是 https://open.weixin.qq.com/connect/qrconnect。它需要携带 appid、redirect_uri、response_type、scope 和 state 这几个参数。其中 redirect_uri 必须使用 urlencode 处理,否则特殊字符会造成微信侧解析错误。
下面这段 PHP 代码演示了如何生成一个完整的微信登录跳转地址。注意回调地址需要使用 urlencode 进行编码,state 参数建议使用随机字符串,用来防止跨站请求伪造。
<?php
$appid = '你的AppID';
$redirectUri = 'https://www.ipipp.com/login/callback';
// 对回调地址做 urlencode,这是避免 redirect_uri 参数错误的关键
$redirectUriEncoded = urlencode($redirectUri);
$state = md5(uniqid('weixin', true));
$loginUrl = 'https://open.weixin.qq.com/connect/qrconnect?appid='
. $appid
. '&redirect_uri=' . $redirectUriEncoded
. '&response_type=code'
. '&scope=snsapi_login'
. '&state=' . $state
. '#wechat_redirect';
header('Location: ' . $loginUrl);
用户扫码并确认授权后,微信会跳回 redirect_uri 指定的地址,并在 URL 后追加 code 和 state 参数,例如 https://www.ipipp.com/login/callback?code=071abc&state=xxxx。此时服务端需要从查询字符串中读取 code,再请求微信接口换取 access_token 和 openid。其核心请求示例如下。
<?php
$code = $_GET['code'];
$appid = '你的AppID';
$secret = '你的AppSecret';
$apiUrl = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='
. $appid
. '&secret=' . $secret
. '&code=' . $code
. '&grant_type=authorization_code';
$response = file_get_contents($apiUrl);
$data = json_decode($response, true);
echo $data['openid'] ?? '获取失败';
换取 access_token 的接口必须从服务端发起,不能放在前端 JavaScript 中,因为 AppSecret 一旦暴露会给账号带来严重风险。code 的有效期只有五分钟,并且每个 code 只能使用一次。重复使用同一个 code 会收到错误响应,所以调试时不要反复刷新已经换过 token 的回调地址。
三、redirect_uri 参数错误的常见原因
微信登录报错中最常见的就是 redirect_uri 参数错误。出现这个错误时,页面通常不会继续跳转,而是停留在微信的错误提示页。多数情况下,问题并不在代码本身,而在于后台配置的授权回调域和实际请求中的 redirect_uri 没有对应上。比如后台填的是 ipipp.com,但实际请求中使用的是 www.ipipp.com,这两个字符串不一样,就会直接报错。
排查时先打开浏览器的开发者工具,切换到 Network 面板,找到 open.weixin.qq.com/connect/qrconnect 的请求,复制 redirect_uri 参数的值,再手动做一次 urldecode。然后对照开放平台后台的授权回调域逐字符核对。除了域名必须一致外,还要确认 redirect_uri 没有携带端口号,也没有写成 localhost 或 127.0.0.1。微信正式应用不支持本地回环地址作为回调域名。
本地开发时想让微信登录跑通,可以使用内网穿透工具获取一个公网域名,把该域名映射到本地开发环境。需要把这个公网域名配置到开放平台的授权回调域中,同时确保该域名可以通过 ICP 备案。还要注意内网穿透服务可能会改变 Host 头或加入额外参数,调试时应尽量在真实回调地址中输出一次完整的 query string,观察 code 和 state 是否完整到达。
四、公众号网页授权回调域名的差异
如果你的项目不是网站扫码登录,而是在微信公众号网页里使用微信授权登录,那么后台位置和填写规则会有一些差异。公众号网页授权是在微信公众平台中配置,而不是开放平台的网站应用。进入公众号后台,找到设置与开发,再进入接口权限,找到网页授权获取用户基本信息。点击修改后,需要先下载一个校验文件并上传到域名根目录,完成域名归属验证。
公众号网页授权回调域名同样不能带 http:// 或 https://,但可以填写到具体路径,例如 www.ipipp.com/wx/callback。实际发起授权时使用的链接是 https://open.weixin.qq.com/connect/oauth2/authorize,参数中包含 appid、redirect_uri、response_type、scope 和 state。这里的 scope 通常选择 snsapi_base 或 snsapi_userinfo,前者只能拿到 openid,后者可以拿到用户昵称和头像等信息。
同一个域名如果既用于开放平台网站应用,又用于公众号网页授权,需要在两个后台分别配置,不能互相替代。尤其要注意,开放平台网站应用填写纯域名,公众号网页授权可以填写域名加路径,两者的校验逻辑不同。配置完成后,记得先清空浏览器缓存再测试,避免旧的授权页面或跳转缓存影响判断。
五、配置完成后的检查清单
为了避免上线后反复返工,可以在配置微信登录回调域名时按照以下清单逐项检查。第一,确认域名已经完成 ICP 备案,且备案信息与网站内容一致。第二,确认开放平台网站应用的授权回调域只填写了纯域名,没有协议头、端口和路径。第三,确认代码中 redirect_uri 使用了 urlencode,并且编码前的域名与后台配置完全一致。第四,确认回调地址在公网可以访问,且没有强制跳转到其他页面。
第五,确认 state 参数由服务端随机生成,并在回调后校验 state 值是否与 session 中保存的值一致,防止 CSRF 攻击。第六,确认 AppSecret 只保存在服务端,绝不写入前端脚本或仓库公开代码。第七,确认 code 获取后立即换取 access_token,不要缓存已经使用过的 code。第八,如果同时使用 PC 端和移动端域名,需要把多个域名都加入授权回调域。
按照这些配置要点和排查思路,新手也能比较顺畅地完成微信登录回调域名的设置。遇到报错时先不要反复重新提交应用,而是从后台配置、请求参数、域名备案三个方向逐一排查,大部分问题都能很快定位。
微信登录回调域名微信登录域名配置redirect_uri修改时间:2026-09-20 13:28:59