php抓取网页域名(微信官方对这个选项的说明:关于网页授权回调域名)
优采云 发布时间: 2021-09-13 08:06php抓取网页域名(微信官方对这个选项的说明:关于网页授权回调域名)
最终的解决方案是:请继续阅读详细介绍。
做项目集成微信登录和微信支付时需要用户授权。授权过程可以简单描述为:
1. 用户触发了一个需要我们应用授权的操作,比如点击微信登录;
2.2.应用收到该用户请求后,将用户重定向到微信提供的授权页面:
或
3. 用户通过微信扫码(PC端授权,左上图)或点击确认按钮(手机端授权,右上图)通知微信,授权应用访问自己的微信账号信息;
4.微信收到用户授权后生成授权码,作为参数回调应用的某个页面;
5.5.的回调页面收到微信的回调请求后,获取其中的授权码,通过微信官方提供的access token api接口获取access token;
6. 最后,可以通过access token和微信官方提供的另一个userinfo api接口获取到用户的微信账号信息。
为了实现这个过程,首先为应用申请一个微信公众号,在微信公众号设置中将应用最终部署的域名设置为授权回调页面域名的选项。该选项官方微信说明如下:
网页授权回调域名说明
1、微信公众号请求用户网页授权前,开发者需要到官网“开发-接口权限-Web服务-Web帐号-Web授权获取用户基本信息”的配置选项官方平台的。修改授权回调域名。请注意这里是域名(一个字符串),不是URL,所以请不要加协议头;
2、Authorization 回调域名配置规范为完整域名。比如需要网页授权的域名为:配置后,该域名下的所有页面都可以通过OAuth2.0进行认证。但是,不能进行 OAuth2.0 认证
3、如果公众号登录授权给第三方开发者管理,则不需要做任何设置,第三方可以替换公众号实现网页授权
可以看出这个规则是极其严格的。如果说我们的应用最终部署的时候只有一个域名,那么这条规则就没有问题;但考虑到未来应用的复杂性,我们可能会在应用设计之初将应用拆分,然后使用不同的二级域名部署不同的Service。比如一个有事务的应用,你可以将登录注册、事务管理和常规业务分开,然后按照如下方式部署:
部署常规业务;
部署事务管理业务;
部署登录注册业务;
在这种模式下,如果微信登录和微信支付相结合,上述回调页面域名的授权规则会给应用带来问题。这里:至少上面描述的用户微信授权可以确认,都需要授权,但是是两个不同的子域,我们只有一个公众号;根据授权回调页面域名的原则,只能使用一个域名,并且只有当回调地址的域名与本设置完全一致时,才能成功发起微信授权,否则会提示rediret_uri 参数错误或导致无法回调的问题。
那么如何处理这种情况?
目前的解决方案是引入一个新的非常简单的应用程序作为微信授权的代理服务。你可以这样做:
1. 将公众号的网页授权接口域名设置为其他子域名,如;
2. 然后将php_weixin_proxy中的index.php部署到
php_weixin_proxy下的index.php是一个很简单的php文件,可以直接查看源码了解其实现。因为现在的项目环境,我用php来完成这个代理服务的实现。事实上,你可以使用任何平台语言来完成类似的功能。
当其他服务需要发起微信授权时,会先发送授权请求,然后再转发给微信;
用户同意授权后,会收到微信的授权回调,并将回调结果(代码、状态参数)原封不动地返回给发起授权的商家。
唯一不同的是,在不使用时,您从微信授权申请中发起的链接应该是这样的:
使用后,授权链接应该是这样的:
%3A%2F%%2Flogin%2Fnotify&response_type=code&scope=snsapi_base&state=584bc87e11ff37492&device=pc
将以下链接与以上链接进行比较:
1.下面链接中的host变成了,就是代理的授权回调域名;
2.后面还有一个额外的设备参数,这是必须的。由于微信PC端和手机端授权地址不同,发送如下链接,转发授权申请时还需要一个参数告诉它是使用PC端授权地址还是移动端授权地址到微信。
总体规划思路:
总结:
我已经测试了这个方案并且它有效。虽然引入了代理服务,增加了重定向操作,但是由于这个授权请求并不是所有请求都需要,所以实际上不会对用户体验造成太大影响,但是从架构上来看,它的好处是非常大的伟大的。显然,它可以配合应用的拆分逻辑,整合同一个公众号的登录和支付功能。没必要为每个子应用单独申请一个公众号来开发(这个方法从商业角度来说是不合理的,一个公司为什么要运营这么多公众号)。
如果你觉得这篇文章对你有用,不妨给我点个赞,或者在评论里给我点个赞。小小的成绩是以后继续为大家写出高质量文章的动力,谢谢流云!欢迎大家继续关注我的博客:)