微信賬戶綁定

來源:互聯網
上載者:User
原文地址:http://hello1010.com/bind-wechat/

二維條碼/二維碼(2-dimensional bar code)是用某種特定的幾何圖形按一定規律在平面(二維方向上)分布的黑白相間的圖形記錄資料符號資訊的;在代碼編製上巧妙地利用構成電腦內部邏輯基礎的“0”、“1”位元流的概念,使用若干個與二進位相對應的幾何形體來表示文字數值資訊,通過圖象輸入裝置或光電掃描裝置自動識讀以實現資訊自動處理

最近幾年,二維碼的應用特別廣泛。對二維碼的推廣及應用可以說是如魚得水,二維碼支付,二維碼登入,二維碼名片等等。可以說,二維碼已經成為 O2O中連接線上線下的重要紐帶。小馬哥也稱"二維碼是線上線下的一個關鍵入口"。

現在很多網站都已經建立起來自己的一套完整使用者帳號體系,在全民的時代,勢必要考慮開發和運營公眾號,不是為趕潮流,只為方便使用者,因為提供了O2O很好的解決方案,更重要的是,具有一個良性的並不斷完善的生態鏈。

當使用者關注公眾號後,會有一些互動,互動過程中可能需要擷取到使用者的身份資訊(對應到網站的賬戶資訊),例如在公眾號中下單,查詢訂單等操作。那麼現在問題來了:對於同一個使用者,我們如何建立公眾號使用者(openid)與網站使用者(userid)之間的對應關係。這個過程我們稱之為綁定。


為了簡化討論,我總結了這樣兩個情境:

一、使用者登入成為我們的網站使用者,但還未關注我們的公眾號;
二、使用者未註冊,但已關注我們的公眾號。

對於以上兩種情況,下面分別討論。

情境一

使用者登入成為我們的網站使用者,但還未關注我們的公眾號。在這裡,需要使用者在網站上先登入,然後在合適的地方給出一個綁定入口,比如在個人設定裡。繫結資料流程如下:


這裡需要用到的二維碼產生功能:產生帶參數的二維碼

關於二維碼,官方文檔中這樣說:

目前有2種類型的二維碼,分別是臨時二維碼和永久二維碼,前者有到期時間,最大為1800秒,但能夠產生較多數量,後者無到期時間,數量較少(目前參數只支援1--100000)。兩種二維碼分別適用於帳號綁定、使用者來源統計等情境。

顯然,我們使用臨時二維碼比較合適。每當使用者重新整理頁面時,都可以產生一次。

由於二維碼裡可以帶有情境值(scene_id),當使用者掃描帶有情境值的二維碼後,伺服器會把情境值推送給我們自己的伺服器,我們拿到情境值後,就可以做驗證和綁定邏輯。注意:產生二維碼需要認證後的服務號。

一次完整的繫結資料流程應該是這樣的:

①使用者登入網頁,點擊“綁定賬戶”;
②後台使用介面,產生二維碼連結返回給最上層顯示,並建立情境值A與使用者的對應關係;
③使用者掃描二維碼,並點擊關注公眾號(假如已關注,直接跳到④);
④後台接收伺服器推送的情境值A;
⑤後台根據情境值A,查詢到對應的使用者ID(依賴於②中建立的對應關係);
⑥建立使用者userid與使用者openid的對應關係;
⑦給使用者的用戶端推送“綁定成功”的提示;
⑧通知前台頁面,綁定已完成,重新整理頁面,並返回一些賬戶資訊。完成綁定。

其中,②中,“建立情境值A與使用者之間的對應關係”,因為使用者已經登入,所以使用者點擊“綁定賬戶”時,我們可以在後台分配一個臨時情境值A與使用者ID之間的對於關係。對於使用者量不大的網站,可以直接使用php中的apc來緩衝,並設定一個到期時間(與臨時二維碼到期時間設定成一樣即可)。

⑧中,因為http沒有推送機制,所以最簡單的方法就是輪詢去查詢,是否已經完成綁定,完成綁定後再重新整理頁面。

完成綁定後,使用者再跟我們的公眾號互動時,根據openid可以找到對應的userid,即完成身份識別。對於之前提到的下單,查詢訂單,都是可以實現的。

整個綁定過程並不複雜,實現起來也沒有太大的技術難度,最關鍵的是思路。

情境二

情境二,對於使用者來說操作略微複雜,因為它需要使用者在用戶端的網頁中完成登入/註冊。所以,假如註冊過程太過複雜繁瑣,不建議使用。

流程:


上述繫結資料流程整合了註冊的過程,所以看起來比較複雜。實現起來也沒有太大的難度,我們重點關注一下安全性方面的問題,因為綁定賬戶涉及到使用者的資訊安全,考慮兩個問題:

1、如何防止連結被偽造

登入/註冊的連結需要確保是我們自己的伺服器產生的,其他人無法偽造。可以參考的驗證伺服器位址的有效性。所以一個比較安全的登入連結可以是這樣的:

http://api.hello1010.com/wechat/login.html?openid=x1&signature=x2&timestamp=x3&nonce=x4&echostr&=x5

校正簽名的代碼:

private function checkSignature(){    $signature = $_GET["signature"];    $timestamp = $_GET["timestamp"];    $nonce = $_GET["nonce"];        $token = TOKEN;    $tmpArr = array($token, $timestamp, $nonce);    sort($tmpArr, SORT_STRING);    $tmpStr = implode( $tmpArr );    $tmpStr = sha1( $tmpStr );    if( $tmpStr == $signature ){        return true;    }else{        return false;    }}

token值可以跟自己的公眾號背景一致,也可以換一個,建議換一個安全點。

2、如何確保openid是可信的

考慮這種情境:A使用者進入登入頁面,複製登入連結到瀏覽器,把openid替換為B使用者的openid,使用A使用者的帳號密碼登入。這樣就把A使用者的userid和B使用者的openid綁定在一起了,顯然是不安全的。

解決方案有很多,比如可以給openid加密,在加密方法保密的情況下,使用者無法偽造加密後的openid。假如不想給openid加密,可以在產生連結時,在伺服器端建立openid與簽名signature的對應關係,假如使用者篡改了openid就無法通過校正。

記住,永遠不要輕信用戶端傳過來的資訊。

擴充應用

完成綁定後,我們可以做一些簡單的應用。比如,公司需要舉辦一個線下路演活動,該活動需要報名才能參加,並且需要簽到。

這是一個典型的可以用實現的O2O例子。流程如下:


其中,“綁定使用者子流程”就是情境二中的流程。報名的互動在這裡不再累述,每個業務都不一樣。

對於一個已經完成綁定的使用者,他參加一個活動,需要做的就是通過報名,然後掃描二維碼簽到,體驗相當流暢。

如有任何問題,歡迎跟我交流!


以上就介紹了賬戶綁定,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.