网页授权域名需要加html,如何解决微信网页授权回调域名只能设置一个

问题

在实际的需求中,我们常常遇到多个部署在不同域名下的业务,想使用同一个「微信服务号」进行微信网页授权。但是微信的网页授权只能设置一个回调地址。为了满足业务需求,有人想到给每个业务部门配置一个微信服务号,但是这样的成本太高昂。每个服务号需要定期缴纳年检费用,而且每一个网页授权都需要配置相应后端。

那么,如何解决多个域名使用同一个微信服务号进行网页授权呢?

解决办法

假设我们有 A.example.com 、 B.example.com、C.example.com域名想使用微信授权,我们可以将网页授权域名设置为A.example.com。

步骤如下:

设置回调域名。将域名 A.example.com

微信公众平台->设置->公众号设置->功能设置->网页授权域名

在域名 A.example.com 添加中间页 get-weixin-code.html

中间页不一定在根域名下。在这里我们放在根域名下。中间页的访问地址如下,https://A.example.com/get-weixin-code.html

假设域名 B.example.com/game需要进行网页授权。我们可以使用下面链接进行授权,获取微信的授权code

https://A.example.com/get-weixin-code.html?appid=XXXX&scope=snsapi_base&state=hello-world&redirect_uri=https%3A%2F%2FB.example.com%2Fgame

c8f3e5c9d79f

授权地址参数说明

最终会回调到这个地址 https://B.example.com/game?code=XXXXXXXXXXXXXXXXX&state=hello-world,这样就可以拿到授权 code 和 state 参数。

利用授权 code ,请求自己后端服务器,获取微信用户信息。

原理

从原理图中可以看到,我们还是以类型直接授权的方式获取微信的授权code。但是,我们增加了一次跳转,以满足多个不同域名使用同一微信号进行授权。

c8f3e5c9d79f

image.png

中间页的原理

中间页主要做了依次做了两件事情:

跳转到微信授权页

授权成功,重定向到目标页。

微信后端逻辑

微信授权流程

第一步:用户同意授权,获取code

第二步:通过code换取网页授权access_token

第三步:刷新access_token(如果需要)

第四步:拉取用户信息(需scope为 snsapi_userinfo)

总结

使用中间页的方式,虽然多了一次请求。但是满足了多个域名使用同一个微信号进行网页授权。在实际的使用过程中,我们将get-weixin-code.html页,放在了nginx所在的服务器上。经测试,跳转都在毫秒级完成,用户几乎无感知。

但是,也有不足的地方。使用中间页后,当用户不想进行授权时,微信授权页不会自动关闭,而是停留在中间页。直接授权方式,却可以自动关闭授权流程,回到原位置(聊天窗口或朋友圈)。相关issue

相关资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值