當下的解決方案是引入一個新的非常簡單的應用來作為微信授權的代理服務,可以這么做:
1. 把公眾號的網頁授權接口域名設置成另外一個子域名,如proxy.your.com; 2. 然后把php_weixin_proxy里面的index.php部署到proxy.your.com
php_weixin_proxy下的index.php是一個很簡單的php文件,你可以直接查看源碼了解它的實現方式。因為當前項目的環境,我采用php來完成這個代理服務實現,實際上,你完全可以用任意平臺語言來完成類似的功能。
當其它業務需要發起微信授權時,將授權請求先發到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端還是移動端的授權地址。