微信多回调域名

 

TL;DR

只有一个公众号但需要让多个域名获取OAuth返回的用户信息或微信登录功能,可以考虑使用集中的回调域名进行中转。

本文也是对个人实验项目 SWAN 相关功能的说明。

分析

参见微信开发文档微信网页授权,需要在后台配置redirect_uri,但是redirect_uri每月配置次数以及个数都是有限的。

如果业务有多个域名,都需要使用微信登录或者获取微信基础用户信息,就会存在问题。

整个流程中,配置的redirect_uri是掌握在自己手中的,可以考虑使用回调url再做一次重定向,将用户信息带给其他域名。

实现

时序图

以个人目中的实现 MyWXTAuth.php 举例:

步骤

请求SWAN授权URL

常规微信登录可以访问拼接好的微信相关URL,此处修改为类似的方式,访问 SWAN 实现的授权URL,参数说明:

bid

业务ID,SWAN 会通过这一参数,读取配置信息中允许跳转的域名。

url

业务方的回跳URL。在微信授权成功后,会在回跳URL中追加一个参数wx_tauth_data,参数内容为JSON格式的用户信息

key

可以为随机数。

scope

即微信 OAuth 中的 scope 值,即snsapi_basesnsapi_userinfo

scopesnsapi_base 时,会使用静默登录,返回的数据格式为:

如果需要比如用户头像等信息,需要将 scope 设定为 snsapi_userinfo 并进入授权模式。

返回数据格式样例为:

举例

假设域名为 wxtauth.foo.combidtest,回调地址 urlhttps://wxtauth.foo.com/callbackscopesnsapi_userinfo,客户端和服务端需要完成的工作为:

客户端

假设服务端的域名为 swan.bar.com,默认情况下(假设服务端使用HTTPS),用于中转的登录接口 URL 为 https://swan.bar.com/wechat/swan/wxtauth

完成自己的业务逻辑之后拼接出 URL:

https://swan.bar.com/wechat/swan/wxtauth?bid=test&url=https://wxtauth.foo.com/callback&scope=snsapi_userinfo&key=123456

并302重定向到这一 URL 之上。

在弹出新窗口中完成授权操作后,需要在 url 参数指定的 URL 上实现相应的登录成功处理逻辑,即读取回调中的携带的 wx_tauth_data 参数,之后继续完成对应的业务逻辑。

服务端

处理逻辑参见 \App\Http\Controllers\WeChatController::wxtauth

服务端首先需要在 .env 文件中配置 bidtest 的请求所允许的回调域名。配置格式:

WX_TAUTH_CLIENT_TEST_AUTHENTIC_DOMAINS=wxtauth.foo.com

请注意加粗的 TEST ,每新增一个bid,需要增加一行配置,在加粗部分替换为大写的 bid 的值。

之后服务端会完成微信相关的授权功能,这里特别感谢 安正超 优秀的开源项目 EasyWeChat,让微信接入变得极为简便。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

This site uses Akismet to reduce spam. Learn how your comment data is processed.