流程解释
微信团队为了确认域名的归属,使用校验文件内容的方式,具体步骤如下:
- 微信生成一个校验文件,文件名为「随机字符+.txt」后缀(比如:abcabc.txt),文件内容是一个随机长的字符串。【注意:每个业务的校验文件名和内容都不一样,需要实际下载确认】
- 开发者将校验文件上传到目标域名的服务器下,保证访问可以按照「域名+/+校验文件名」或「域名+路径+校验文件名」访问到(具体什么路径,需按照微信相关业务平台的要求来)
- 开发者在微信相关业务平台中点击配置按钮或者校验按钮,微信服务器会向目标路径请求内容,然后将服务器返回的内容(即 txt 文件里的内容)和微信数据库的内容做对比,如果对比成功则确认通过。
- 开发者成功配置域名后,后续新增其他域名,微信服务器一般不会向已配置成功的域名发起校验(但有时根据风控或者其他原因,还是要校验)
- 同一个业务(账号+功能),校验文件名和文件里的字符串内容都不会变化。(比如「小程序业务域名」和「小程序二维码打开能力」就是两个业务,校验文件会不同)
问题排查
在发起校验时,如果出现失败,需要按照提示来依次排查:
一、明确提示校验文件内容不一样
有些开发者的服务器,可能不是文件服务或对象存储,而是业务计算服务,微信访问校验文件路径时,对业务计算服务来说,可以模拟一个 GET 请求,请求的路径等于「校验文件路径」,返回的内容则是一个字符串(即校验文件的内容),这种方式也能校验成功。
但有些服务器,如果没有访问到文件或者没有有效接口路径时,不会返回错误,而是返回 200 成功,并返回一个错误字符串或者一个 404 页面(html 内容本质是字符串),微信服务器收到后,将收到字符串去和数据库记录对比,明显不一样,所以会报这种明确报错。
因此开发者应注意排查:
- 校验文件是否在正确路径上(不是所有校验都是要求在根路径上的,要看平台的提示),下载的文件名也不能自己改,大小写要保持一致
- 服务器是否做了一些特殊限制,无法非登录态直接访问到内容(做了 302 跳转登录页)
- 下载的校验文件内容确认是否是随机字符串文字,而不是html内容,如果下载下来的校验文件内容为HTML数据,一般为登录态过期。请重新登录小程序下载校验文件。
- 真实访问校验路径,看返回的内容是否和下载的文件内容一致。(部分开发者使用 cdn 等缓存手段,也要注意地域的缓存问题,有能力可以重新刷新 cdn 节点缓存,或者过段时间再尝试)
二、系统错误,请稍后再试
当出现这个错误提示时,绝大部分原因就是:微信服务器无法访问目标路径,建立不了网络请求,直接报网络错误了。
类似于 fetch fail 这种提示,因此开发者需注意排查以下几点:
- 使用外部网络(手机热点等)访问链接,确认自身服务器没有拦截请求(配了个内网域名肯定不行,要排除白名单或者防火墙是否有限制)
- 微信服务器会请求 https 协议路径,确保域名所在服务器能正确响应 https 请求,SSL 证书没有过期。
- 校验请求需要在短时间内完成,建议耗时小于 1 秒,如果超过,微信服务器可能直接拒绝掉判定失败。
- 【重要】检查服务器加密套件,为保持兼容性,微信平台的校验服务,要求开发者的校验文件所在服务器,需配置 TLS1.1 加密套件,如只能配置 TLS 1.2 应配置允许降级的加密套件。仅配置 TLS 1.3 或 不支持降级 TLS 1.2 的加密套件是无法通过校验的。
已经上传了文件,输入域名 点击验证,一直提示:系统错误,请稍后再试
请问域名+端口+文件路径+文件名可以吗
通过web-view打开一个第三方托管的页面,没有对应的实体服务器,这种校验文件要怎么处理呢
在小程序中调用云服务商的html页面地址,需要把校验文件放到云服务商提供的服务器上吗?
请问域名解析在海外 国内的解析是走的代理 回到海外,这种情况是否可以正常验证和使用呢