最近在公司負責一個ROR項目,基於Rabel的論壇產品,老板想把這個產品植入微信,讓我做微信綁定登陸。微信開發文檔還是很不錯的,折騰了幾天,把這個功能拿下了。
微信獲取用戶資料文檔:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
如何獲取用戶資料我就不贅述了,文檔上說明很清楚,我主要說說實現微信綁定與登陸的思路。
要點包括但不限於:
- 保存用戶的數據表Person中,添加字段weixin_openid,用於保存微信與公眾號唯一的用戶標識
- 在服務端實現URL跳轉時保留查詢字符串的功能,具體例子如
- 未登錄用戶訪問/home?code=123456,此時應跳轉到/login?code=123456,而非/login
- 登陸頁面有三種形式
- 最原始的用戶密碼登陸。此形式將不包含查詢字符串
- 此時輸入用戶密碼登陸
- 已綁定微信的用戶快捷登陸方式。此形式會包含查詢字符串?code=123456
- 此時服務器端利用code獲取openid,若成功找到綁定的用戶,直接登陸
- 一個用戶想要進行微信綁定,點擊綁定入口后,由於未登錄而跳轉到的登陸頁面。此形式會包含查詢字符串?code=123456&state=bind
- 服務端檢測到state=bind,得知是綁定操作,暫時不去獲取openid,待用戶登陸跳轉后,再去獲取openid進行綁定。(這就是第二點保留字符串跳轉的作用)
- 最原始的用戶密碼登陸。此形式將不包含查詢字符串
- 魯棒性,包括
- 查詢字符串錯誤或缺失的處理
- 微信綁定的邏輯性處理,例如一個微信只能綁定一個賬號,一個賬號只能綁定一個微信,不能重復綁定
附一個當時做的微信綁定的流程圖