搜尋
首頁後端開發php教程微信帳戶綁定

微信帳戶綁定

Aug 08, 2016 am 09:30 AM
nbspopenidquotsignature

原文網址: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教程有興趣的朋友有所幫助。


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP的完整形式是什麼?PHP的完整形式是什麼?Apr 28, 2025 pm 04:58 PM

文章討論了PHP,詳細介紹了其完整形式,在We​​b開發中的主要用途,與Python和Java的比較以及對初學者的學習便利性。

PHP如何處理形式數據?PHP如何處理形式數據?Apr 28, 2025 pm 04:57 PM

PHP使用$ \ _ post和$ \ _獲取超級全局的php處理數據,並通過驗證,消毒和安全數據庫交互確保安全性。

PHP和ASP.NET有什麼區別?PHP和ASP.NET有什麼區別?Apr 28, 2025 pm 04:56 PM

本文比較了PHP和ASP.NET,重點是它們對大規模Web應用程序,性能差異和安全功能的適用性。兩者對於大型項目都是可行的,但是PHP是開源和無關的,而ASP.NET,

PHP是對病例敏感的語言嗎?PHP是對病例敏感的語言嗎?Apr 28, 2025 pm 04:55 PM

PHP的情況敏感性各不相同:功能不敏感,而變量和類是敏感的。最佳實踐包括一致的命名和使用對案例不敏感的功能進行比較。

您如何重定向PHP中的頁面?您如何重定向PHP中的頁面?Apr 28, 2025 pm 04:54 PM

本文討論了PHP中針對頁面重定向的各種方法,重點關注header()函數,並解決了諸如“標題已經發送”錯誤之類的常見問題。

解釋PHP中的類型暗示解釋PHP中的類型暗示Apr 28, 2025 pm 04:52 PM

文章討論了PHP中的類型暗示,這是一個用於指定功能中預期數據類型的功能。主要問題是通過類型執法提高代碼質量和可讀性。

PHP中的PDO是什麼?PHP中的PDO是什麼?Apr 28, 2025 pm 04:51 PM

本文討論了PHP數據對象(PDO),這是PHP中數據庫訪問的擴展名。它通過準備好的語句及其對MySQLI的好處,包括數據庫抽象和更好的錯誤處理,強調了PDO在增強安全性方面的作用。

如何在PHP中創建API?如何在PHP中創建API?Apr 28, 2025 pm 04:50 PM

文章討論了創建和保護PHP API,詳細介紹了從端點定義到使用Laravel和最佳安全實踐等框架優化性能優化的步驟。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。