微信公众号开发解决页面域名只能设置一个的问题
本次项目开发中遇到一个问题,客户公众号微信登陆授权已被另外一个系统使用,微信后台网页授权域名只能填写一个,导致我的系统不能绑定。
所以想到2个解决方案,
一:在原项目下面新建子应用程序,但是还是存在问题,原项目使用的是MVC开发,子项目用的是webform ,配置好了总是继承父项目的路由一直显示404,由于原项目没有源码不能更改路由去接受webform的页面,所以放弃
二:根据网上寻找的方案是:引入一个新的非常简单的应用来作为微信授权的代理服务
1. 把公众号的网页授权接口域名设置成另外一个子域名,如proxy.your.com;
2. 然后把get_weixin_proxy里面的index.html部署到proxy.your.com
get_weixin_proxy下的index.html是一个很简单的html文件,你可以直接查看源码了解它的实现方式。
因为当前项目的环境,我采用html来完成这个代理服务实现,实际上,你完全可以用任意平台语言来完成类似的功能。
当其它业务需要发起微信授权时,将授权请求先发到proxy.your.com,然后proxy.your.com会把这个请求转发到微信;
当用户同意授权后,proxy.your.com 会收到微 信的授权回调,并把回调结果(code、state参数)原封不动地再返回给最开始发起授权的业务。
唯一的区别在于,在不使用proxy.your.com的时候,你从应用发起微信授权的链接应该是这样的:
https://open.weixin.qq.com/connect/qrconnect?appid=xxxxx&redirect_uri=http%3A%2F%2Fpassport.your.com%2F&response_type=code&scope=snsapi_login&state=584bc87e11ff37492#wechat_redirect
用了proxy.your.com之后,这个授权链接就应该是这样的:
http://proxy.your.com/?appid=xxxxx&redirect_uri=http%3A%2F%2Fpassport.your.com%2Flogin%2Fnotify&response_type=code&scope=snsapi_base&state=584bc87e11ff37492&device=pc
后面这个链接跟上面的比:
1. 后面的链接中的host变成了proxy.your.com,也就是代理的授权回调域名;
2. 后面的多了一个device参数,这个是必要的。因为微信pc端跟移动端的授权地址是不一样的,而后面的链接是发送个proxy.your.com的,所以需要多加个参数告诉它在转发给授权申请给微信的时候,是用PC端还是移动端的授权地址。
整体方案都设计好后,发现还是运行不了,中间始终无法获取access_token,又去检查客户公众号的配置,发现IP白名单没有绑定,重新绑定后调用成功。成功解决了本次的需求。