微信帳戶綁定

WBOY
發布: 2016-08-08 09:30:26
原創
1527 人瀏覽過

原文網址: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×tamp=x3&nonce=x4&echostr&=x5的代碼:

<code><span>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;
    }
}
</span></code>
登入後複製
token值可以跟自己的微信公眾號後台的一致,也可以換一個,建議換一個安全點。

2、如何確保openid是可信的

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

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

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

擴充應用

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

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


其中,「綁定使用者子流程」就是場景二中的流程。報名的交互在這裡不再累述,每個業務都不一樣。

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

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

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


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!