前言
最近在做微信网页项目时,发现服务号授权域名只能有两个,而多个项目都需要用到微信授权获取用户信息,这就导致了域名不够用的问题。如果给每个项目都配一个服务号,这显然是不现实的,不仅需要成本而且很浪费资源。通过思考以及网络查找之后,总结出了以下方法:
通过中间页面代理获取微信授权code,然后跳转到对应需要使用授权的项目上
在已授权的域名目录下(根目录,子目录都可以),添加授权代理的中间页B。假如页面A需要使用微信授权,而此时授权域名已经满了,不够用了。此时就到了授权代理中间页B出场了。
在页面A一加载时就跳转到中间页B,window.location.href = “中间页B”,需要注意的是,在中间页B中,里面的redirect_uri写的是上图中写的用于获取code后的页面==(其他网上的说法是,redirect_uri写的是需要授权的页面,而我尝试了之后,发现redirect_uri参数错误,估计是该域名没有授权的问题)==,所以需要用一个转发页代理,从而获取code。
二、在已授权的域名目录下,添加一个用于获取code之后转发的页面
在第一步,用户一打开页面A时,页面A就会跳转到中间页B,而此时就会询问用户是否授权(这里有分静默授权与非静默授权,具体自行查看微信开放文档),当用户允许授权时,页面就会跳转到redirect_uri所填写的回调地址,也就是我们第二步要添加的这个页面C;原理很简单,就是当从中间页B回调到页面C时,会自动附带上code,这样我们就能拿到code后,跳转回页面A,而此时页面A就可以拿到code,利用 code ,请求自己后端服务器,获取微信用户信息。
我这里用的是PHP,拿到code后,将code附带回页面A中(code直接附带在链接上,其实是不安全的,目前还没想到什么其他的方法,还请大佬指教!!!)。
使用中间页的方式,虽然多了一次请求。但是满足了多个域名使用同一个微信号进行网页授权。在实际的使用过程中,经测试,跳转都在毫秒级完成,用户几乎无感知。
但是,也有不足的地方。使用中间页后,当用户不想进行授权时,微信授权页不会自动关闭,而是停留在中间页。直接授权方式,却可以自动关闭授权流程,回到原位置(聊天窗口或朋友圈等)。
通过自己摸索了一两天的时间,也看着官方文档以及网络查找的资料,一步一步去实现,还是挺简单的。对于本人的总结,有错误之处,敬请各位大佬指正!