/ 技术

微信公众号中更换域名

更新

如果需要实现微信授权支持多个回调域名,可以参考我这个开源项目:GetWeixinCode


问题描述

项目刚做的时候,并没有找到好的域名,所以用了一个比较长的域名。后来公司花钱买了一个心仪的域名,理所当然,我们需要启用新域名了。

我们的H5站点是基于微信的,由于微信的各种坑,这里有很多值得注意的地方。

首先,需要在公众号设置中,将新域名加入到业务域名以及JS接口安全域名中,在微信支付的开发配置中,也要将新域名加入支付授权目录中。这几个比较容易,因为他们都支持配置多个域名。

我们的页面加载之后会立即通过静默授权跳转去拿用户的code以换取openid,来实现自动登录,为了减少跳转,我们在微信公众号的自定义菜单中配置的链接就是微信的授权链接
https://open.weixin.qq.com/connect/oauth2/authorize?XXXXX&redirect_uri=h.xxx-old.com
这里比较坑的是,授权回调页面域名只能配置一个,而且自定义菜单的修改最慢要24小时才能生效,而且你没法确定是什么时候生效,有的用户会生效,有的用户仍是旧的链接。所以这里的链接不能冒然改成新链接。不过我们可以这么实现。

解决方案

  1. 修改公众号自定义菜单中配置的链接,直接改为原域名http://h.xxx-old.com,在页面代码中做判断,如果没有拿到code参数,就主动跳转到微信的授权页面去拿code(这个原来就做了,为了让用户直接访问域名的时候也能拿到code)。这个生效可能需要24小时,稳妥的做法就是等24小时之后再进行后面的操作。

  2. 将代码中跳转到微信授权页面的redirect_uri改为新域名:
    https://open.weixin.qq.com/connect/oauth2/authorize?XXXXX&redirect_uri=h.xxx-new.com
    同时将微信公众号中的授权回调页面域名改为新域名(这个是立即生效的)。这时,无论是从旧域名访问还是从新域名访问,授权回调的时候,都会成功跳转到新域名,并且带上code了。

  3. 修改公众号中的链接,改为微信授权链接,并且redirect_uri写成新域名:
    https://open.weixin.qq.com/connect/oauth2/authorize?XXXXX&redirect_uri=h.xxx-new.com
    这个时候,无论是更新后的链接还是尚未更新的链接,都能成功授权,只是直接用域名会多跳转一下而已。

Done.

by Bean

上午于莘庄