微信與第三方用戶綁定主要是怎么獲取OpenID, 公眾號中的OpenID是唯一的,所以首先要關注公眾號,才能獲取OpenID,
並且第三方的數據庫中用戶表中必須有OpenID字段數據。
一:已注冊第三方用戶,且已登錄,在網頁上綁定“微信帳號”
1:后台通過使用微信接口,生成一個臨時二維碼(其中二維碼的地址包括scene_id,生成scene_id時,並綁定用戶ID),並在前端顯示;
2:用戶掃描二維碼,如果沒有關注微信公眾號,則點擊關注微信公眾號;
3:服務端處理關注后的事件推送,通過EventKey獲取scene_id和Openid;
用戶未關注時
<EventKey><![CDATA[qrscene_123123]]></EventKey> //qrscene_為前綴,后面為二維碼的參數值
用戶已關注時
<EventKey><![CDATA[SCENE_VALUE]]></EventKey>//一個32位無符號整數,即創建二維碼時的二維碼scene_id
4:根據scene_id來獲取綁定的用戶ID,並建立用戶ID與微信用戶openid的對應關系;
5:給用戶的微信客戶端推送成功綁定提示;
二:已注冊第三方用戶,但是未登錄
1:后台通過使用微信接口,生成一個臨時二維碼(其中二維碼的地址包括scene_id,生成scene_id時,並綁定用戶ID),並在前端顯示;
2:掃描網站上的二維碼, 用戶和微信交互時 ,你可以取到用戶的OpenID。
檢查數據表,如發現該OpenID沒有綁定系統用戶,則返回一個鏈接供用戶在微信內嵌瀏覽器中打開,這個鏈接打開后類似於系統用戶登錄界面。
關鍵是鏈接的生成,鏈接需要帶3個url參數:
1. 用戶OpenID:因為你需要在綁定頁面中取到是哪個微信用戶想要綁定系統用戶。
2. 時間戳timestamp:這是為了防止鏈接泄漏出去被惡意利用,具體來說就是一個你指定的過期時間,超過這個時間這個鏈接就失效了,用戶只能再次獲取。
3. 簽名signature:這是為了保證此驗證鏈接只有你才可能生成,用戶及第三方均無法偽造。
簽名的生成需要你有一個只有你知道的token(密鑰,不要與設置在公眾號里面的token相同),生成簽名方法和驗證微信服務器消息真實性類似。流程如下:
1. 將token、OpenID、timestamp三個參數進行字典序排序。
2. 將三個參數字符串拼接成一個字符串進行sha1加密,得到鏈接的signature參數。
用戶打開某個綁定鏈接時,你首先驗證鏈接的有效性,獲取signature與參數中的sinature對比,如果相同,則再檢查鏈接是否超時,兩步驗證均通過,你就可以將用戶的微信OpenID和系統用戶綁定