app系統賬號綁定微信openid,H5與後臺交互

本博文解決問題:


在微信公衆號中添加系統賬號和微信賬號綁定的功能。

PS:源碼在審覈中,完成後會放到此處。

 

先看流程圖:

 

 

說明:

首先H5寫一個輸入賬號的頁面,頁面中調用後臺方法,查詢是否在系統中註冊過,範湖值需要有以下三種狀態:

1、沒有註冊的用戶,是不需要進行綁定的

2、已註冊,但已綁定過微信openid的(看需求是否可以重新綁定)

3、已註冊,沒有綁定的用戶(走綁定流程)。

我們主要說明的第3中狀態。

 

未綁定的用戶,由H5調用鏈接如下:

var s=("https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri="+UrlEncode("回調地址)+"&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect=1");
window.location.href=s;

需要注意的是:

1、整體鏈接中,只有回調地址是需要UrlEncode進行編碼的,整理鏈接不需要。

2、scope爲snsapi_base不需要進行登錄授權(但只能獲取到openid);scope爲snsapi_userinfo時,會有登陸授權頁面彈出,但也可以獲取到更多的信息。看需要使用合適的即可。

3、微信的回調相當於打開一個新的鏈接地址,你發起頁面的輸入賬號是沒有的(彆着急,下面又說到)

4、很多人在回調地址這裏出錯,詳細說明一下:

如果在微信公衆號中,的回調地址寫的是:baoduu.com/wxopenid

PS:回調地址查看:開發 - 接口權限 - 網頁服務 - 網頁帳號 - 網頁授權獲取用戶基本信息

鏈接中回調地址可以寫:baoduu.com/wxopenid/***/***/***,這個***是你接收回調的H5頁面,比如你的project是wxopenid,有html文件A、B、C,例如輸入賬號的頁面爲A.html,你想在A頁面中回調回code,那麼在A頁面中發起了上述的請求連接,其中的回調地址需要寫上A的鏈接地址:

var s=("https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri="+UrlEncode("baoduu.com/wxopenid/A.html")+"&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect=1");
window.location.href=s;

那麼在回調地址中,微信會自動把code憑藉到鏈接後面,例如:baoduu.com/wxopenid/A.html?code=******

如果你想在B.html頁面接收回調,需要寫上B鏈接地址:

var s=("https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri="+UrlEncode("baoduu.com/wxopenid/B.html")+"&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect=1");
window.location.href=s;

那麼在回調地址中,微信會自動把code憑藉到鏈接後面,例如:baoduu.com/wxopenid/B.html?code=******

你只需要在你寫的回調頁面中接收到code即可。

PS:微信這個回調還能再拼接參數,例如:

var s=("https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri="+UrlEncode("baoduu.com/wxopenid/B.html?loginName=100000000")+"&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect=1");
window.location.href=s;

那麼在微信的回調頁面,你會發現他是這樣的:

baoduu.com/wxopenid/B.html?loginName=100000000&code=******

這裏就解決了不知道是那個賬號要綁定微信了,最終的請求鏈接也就是這樣了,個人的建議是在另一個頁面中接收回調,例如在A發起請求,B接收回調。

到這裏示例圖中的1、2、3、4就完成了

 

第5步,在B.html中截取code;

window.onload = function () {
	code = getQueryString("code");
	loginName = getQueryString("loginName");					
	if(code!=null){
		GetOpenid();
	}
}


function getQueryString(name){
	var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");  
	var r = window.location.search.substr(1).match(reg);  
	if (r != null) return unescape(r[2]); return null;              
}

第6步,請求後端接口,把code傳過去,讓後端同事,向微信發起獲取openid請求,因爲這裏需要用到appid和secret,前端不建議存儲,後端請求的鏈接爲:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=替換爲公衆號的標識&secret=公衆號的開發者密碼&code=CODE&grant_type=authorization_code

其中:appid爲公衆號標識,secret爲開發者密碼,code就是我們截取到的code值,需要傳給後端。

後端請求微信回調格式爲:

{
  "access_token":"ACCESS_TOKEN",
  "expires_in":7200,
  "refresh_token":"REFRESH_TOKEN",
  "openid":"OPENID",
  "scope":"SCOPE" 
}

其中的openid就是我們需要綁定的用戶微信標識了。後端把openid傳回到前端。

到此第8步完成。

 

前端接收到openid後,B頁面輸入密碼或短信驗證碼之類的驗證信息,把輸入的賬號、密碼或驗證碼、openid通過後端接口請求過去,後端驗證用戶賬號信息等,是否通過,通過後把賬號和openid綁定到一起,返回給前端一個錯過的標識,至此全部流程完成。

 

PS:完成流程後,想關閉微信瀏覽器咋辦??

1、引入

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

2、WeixinJSBridge.call('closeWindow');

調用此方法就會關閉微信的瀏覽器,回到聊天頁面。

 

 

之後測試通過後,在微信公衆號中添加一個菜單欄,例如名稱爲:“綁定微信”,點擊跳轉鏈接到baoduu.com/wxopenid/A.html即可完成。

 

 

 

 

 

發佈了19 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章