由於項目採用先後端徹底分離方案,因此,沒法使用常規的微信受權登陸做法,須要採用 ajax 實現微信受權登陸。php
由於本人是一個phper ,因此,微信開發採用的是 EasyWeChat
,因此實現的方式是基於EW的。
其實實現這個也麻煩,在實現以前,咱們須要瞭解一下微信受權的整個流程。前端
其實說白了,前端只須要幹一件事兒,引導用戶發起微信受權頁面,而後獲得code
,而後跳轉到當前頁面,而後再請求後端換取用戶以及其餘相關信息。ajax
這裏須要咱們作兩件事,第一去配置jsapi域名,第二配置微信網頁受權的回調域名
構建微信受權的url "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appId + "&redirect_uri=" + location.href.split('#')[0] + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
咱們從鏈接中看到有兩個變量,appId,以及 redirect_uri。appId 不用多說,就是我們將要受權的微信公衆號的appId,另外一方個回調URL,其實就是咱們當前頁面的URL。json
function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; } function wxLogin(callback) { var appId = 'xxxxxxxxxxxxxxxxxxx'; var oauth_url = 'xxxxxxxxxxxxxxxxxxx/oauth'; var url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appId + "&redirect_uri=" + location.href.split('#')[0] + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect" var code = getUrlParam("code"); if (!code) { window.location = url; } else { $.ajax({ type: 'GET', url: oauth_url, dataType: 'json', data: { code: code }, success: function (data) { if (data.code === 200) { callback(data.data) } }, error: function (error) { throw new Error(error) } }) } }