微信授权登录配置说明

微信授权登录配置说明(含错误 10039 与回调域名)

〇、扫描公司二维码进入手机版出现 10039(典型场景)

现象:在 PC 公司详情页用「扫描公司二维码进入公司手机版」,用微信扫码打开后出现微信授权错误 10039

原因简述

扫码后打开的是「手机版公司页」(如 /wap/shop/detail/shop_id/273)。若后台开启了「微信自动登录」,未登录用户会被立即跳转到微信授权页。此时请求里带上的 redirect_uri 必须与公众号后台配置的「网页授权域名」完全一致(协议+域名),否则微信会报 10039。

本系统实际流程

  1. 公司二维码内容 = 后台站点 URL(或当前访问域名) + /wap/shop/detail/shop_id/xxx(见 themes/default/Home/shop/shop_footer.html)。
  2. 用户在微信内打开该链接 → 进入 Wap 模块 → CommonAction 判断:在微信内 + 未登录 + 开启微信自动登录 → 马上 302 到微信授权页
  3. 授权页中的 redirect_uri = 本系统使用的「站点根地址」+ /wap/passport/wxstart(即授权成功后微信会跳回这个地址)。
  4. 该「站点根地址」来自:后台「站点设置」里的「站点 URL」site.host)。若此处未填或填错,拼出来的 redirect_uri 就会与公众号「网页授权域名」不一致 → 10039

常见不匹配情况

情况结果
后台「站点 URL」未配置或为空redirect_uri 会变成相对路径或错误地址 → 10039
后台填 http://www.xxx.com,公众号只配置了 https://www.xxx.com协议不一致 → 10039
后台填 https://www.xxx.com,公众号只配置了 xxx.com(无 www)域名不一致 → 10039
二维码用 m.xxx.com 打开,但后台站点 URL 是 www.xxx.com 且公众号只加了 www.xxx.com若后台未配置 host 则已改为用「当前请求域名」,与扫码入口一致,可避免 10039

已做代码逻辑

当后台「站点 URL」为空或非法时,redirect_uri 的域名改为当前请求的协议+域名(即用户扫码打开的域名),这样与「扫描公司二维码」入口一致,只要把该域名配置到公众号「网页授权域名」即可。

你需要做的

  1. 登录后台 → 设置站点设置 → 将 「站点 URL」 填为与对外访问一致的地址(如 https://www.你的域名.com),且与公众号「网页授权域名」一致(协议+域名)。
  2. 登录微信公众平台 → 公众号设置功能设置网页授权域名 → 填仅域名(如 www.你的域名.com),与站点 URL 的域名部分一致。
  3. 清缓存后,再次用微信扫描公司二维码测试。

一、错误 10039:redirect_uri 配置不匹配

原因:授权成功后跳转的地址(redirect_uri)与微信后台配置不一致。

微信校验非常严格:协议、域名、路径任一项不一致都会报错。

快速排查清单(可直接复制核对)

检查项正确示例错误示例
协议与站点一致(建议 https://)站点是 https 却填 http
域名www.example.comexample.com(少 www)或反过来
端口443(默认不写):8080 等非 443 端口
路径与代码中完全一致多/少一层路径或拼写错误

本系统实际使用的回调地址

  • 自动跳转登录(微信内打开 H5)你的站点域名 + /wap/passport/wxstart.html(或无 .html,以实际 URL 为准)
  • 手动点击「微信登录」你的站点域名 + /wap/passport/wxcallback.html

务必在微信后台配置的「网页授权域名」与上述地址的域名部分一致(只填域名,不填协议和路径)。


二、如何查看 / 配置「授权回调域名」

1. 微信公众号(本系统使用的是公众号网页授权)

  • 登录 微信公众平台
  • 设置与开发公众号设置功能设置
  • 找到 「网页授权域名」
  • 点击「设置」,填写仅域名(如 www.yoursite.com),不要写 http://、路径或端口
  • 按提示上传验证文件到网站根目录,保存后约 5–10 分钟生效

说明:这里配置的是「授权回调域名」。授权时 redirect_uri 可以是该域名下的任意路径(如 /wap/passport/wxcallback),只要域名在列表中即可。

2. 微信开放平台(网站应用,若你用的是开放平台)

  • 登录 微信开放平台
  • 管理中心网站应用 → 进入对应应用
  • 开发信息 里有一项 「授权回调域」(或类似名称)
  • 填写仅域名(如 www.yoursite.com),保存后等待几分钟生效

区别

  • 公众号:用于微信内 H5、服务号网页授权(本系统当前方式)。
  • 开放平台网站应用:用于 PC 网站「微信扫码登录」等。

若你是微信内打开页面登录,重点核对公众号的网页授权域名。


三、除 10039 外常见错误码

错误码含义处理建议
10039redirect_uri 与后台配置不一致按上文核对协议、域名、路径
40013appid 无效检查公众号/开放平台 appid 是否填错、是否属于当前应用
40029不合法的 oauth_code(code 无效/已用)code 只能用一次,不能重复用;重新发起授权
41008缺少 oauth code确保回调页能收到微信带上的 code 参数
42003oauth_code 已超时(约 5 分钟)重新授权获取新 code
40125无效的 appsecret检查公众号/开放平台 appsecret 是否正确、是否重置过

四、微信公众号「网页授权获取用户基本信息」流程

  1. 引导用户打开授权页

后端生成链接并 302 跳转:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

  1. 用户在微信内同意授权

微信会重定向到你的 redirect_uri,并在 URL 上带上 codestate

  1. 后端用 code 换 access_token

请求:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

得到 access_tokenopenid

  1. (可选)拉取用户信息

若 scope 为 snsapi_userinfo,再请求:

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

得到昵称、头像等(部分字段可能不再返回,以当前文档为准)。

注意

  • 回调地址必须 HTTPS(正式环境)。
  • code 只能用一次,换完 token 即失效。
  • 修改公众号/开放平台配置后,一般 5–10 分钟 生效再测。
  • 本地测试(localhost)需用内网穿透,并把穿透后的域名配置到微信后台。

五、本系统后台需核对项

  • 站点设置中的「站点 URL / host」:建议与对外访问的域名、协议一致(如 https://www.yoursite.com),否则 __HOST__ 拼出的 redirect_uri 会与微信里填的域名不一致。
  • 微信配置中的 APPID、appsecret:必须与当前使用的公众号一致。

配置好后,可在后台「微信配置」页查看当前用于授权的域名提示,与公众号「网页授权域名」保持一致即可避免 10039。

copyright 2013-2113 www.baoanfuwu.cn All Rights Reserved 保安服务网版权所有
皖ICP备2021016109号-1