網站實現微信登錄之嵌入二維碼——基於yii2開發的描述

来源:http://www.cnblogs.com/yangtoude/archive/2016/12/15/wechat-login-embedded-qrcode-based-on-yii2-development-experience.html
-Advertisement-
Play Games

之前寫了一篇yii2獲取登錄前的頁面url地址的文章,然後發現自己對於網站實現微信掃碼登錄功能的實現不是很熟悉,所以,我會寫2-3篇的文章來描述下一個站點如何實現微信掃碼登錄的功能,來複習下微信掃碼登錄網站的基本開發過程和需要註意的地方。這是第一篇,主要是描述如何在自己的登錄頁面內嵌入登錄二維碼。按 ...


之前寫了一篇yii2獲取登錄前的頁面url地址的文章,然後發現自己對於網站實現微信掃碼登錄功能的實現不是很熟悉,所以,我會寫2-3篇的文章來描述下一個站點如何實現微信掃碼登錄的功能,來複習下微信掃碼登錄網站的基本開發過程和需要註意的地方。這是第一篇,主要是描述如何在自己的登錄頁面內嵌入登錄二維碼。按照微信開放平臺開發者文檔網站應用微信登錄開髮指南中的一步一步來即可。

1,要掃碼登錄首先要有碼

先看看文檔中給提供的嵌入二維碼的示例代碼:

需要先引入微信提供的js文件

<script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>

然後提供一個存放二維碼的容器,比如下麵的div,下麵實例化js對象是要用到這個容器。

<div id="wx_login"></div>

然後實例化下麵的js對象:

        <script type="text/javascript">
            var obj = new WxLogin({
                id:"wx_login",
                appid: "appid",
                scope: "snsapi_login",
                redirect_uri: "http%3A%2F%2Fwww.yourhost.com%2Fcallback",
                state: "state",
                style: "",
                href: "https://www.yourhost.com/css/qr-style.css"
            });
        </script>

2,解釋下實例化對象時傳遞的參數

appid是微信開放平臺下你申請的網站應用的唯一的AppID;

scope是應用授權作用域,網頁應用目前僅填寫snsapi_login即可;

redirect_uri是重定向地址,需要進行UrlEncode,上面的例子中可以看到url地址被編碼了。

state用於保持請求和回調的狀態,授權請求後原樣帶回給第三方。該參數可用於防止csrf攻擊(跨站請求偽造攻擊),建議第三方帶上該參數,可設置為簡單的隨機數加session進行校驗,比如:

1 // 生成隨機串,防CSRF攻擊
2 $state = md5(uniqid(rand(), true));
3 $session = Yii::$app->session;
4 $session->set('wx_state', $state);

然後上面實例化js對象時,state的值就可以這麼給:

state: <?= $state ?>

然後在後臺就可以從session中取出wx_state和微信授權後帶回的state做比較,從而防止跨站偽造url攻擊:

1     public function actionCallback($code, $state)
2     {
3             // 獲取並校驗前臺存儲的隨機串
4             $session = Yii::$app->session;
5             if ($state != $session->get('wx_state')) {
6                 exit();
7             }
8             $session->remove('wx_state');
9      // ......

style提供二維碼"black"、"white"可選,二維碼上下的文字描述的顏色,預設為黑色文字描述。

href自定義樣式css文件的鏈接,如果你覺得微信預設生成的二維碼大小(或其他樣式)不合適,你可以自己寫一個css文件,然後把這個文件的鏈接放到這裡。這裡需要註意下,這裡的鏈接最好以https開頭,否則會遇到blocked:mixed-content錯誤,而導致樣式不起作用。這是因為,微信生成瞭如下的iframe:

<iframe src="https://open.weixin.qq.com/connect/qrconnect?appid=appid&amp;scope=snsapi_login&amp;redirect_uri=http%3A%2F%2Fwww.yourhost.com%2Fcallback&amp;state=5440b73839647d4790af5fb856870326&amp;login_type=jssdk&amp;href=http://www.yourhost.com/css/qr-style.css" frameborder="0" scrolling="no" width="300px" height="400px"></iframe>

它生成的這個頁面地址內容是https的。

上面的參數:state、style、href不是必需的。 

以上過程最終會生成這麼個東西。。。。。。。。

哈哈,去各大網站(比如京東商城),點擊下微信登錄的鏈接就可以看到效果了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我要寫幾篇隨筆,為準備學習Java作為自己第一門電腦編程語言的同學總結我認為必需、但在一般的Java教材/課程中並不教授的預備知識。但我並不教你Java本身。我(但願可以)幫你弄明白隨便一本Java教材第一章第一節講的“標準版”、“企業版”、“虛擬機”、“垃圾回收”是什麼。理想的讀者是中學生、家庭 ...
  • ...
  • 電腦網路的分類: 區域網(LAN) 指在一個較小地理範圍內的各種電腦網路設備互聯在一起的通信網路,可以包括一個或多個子網,通常局限在幾千米的範圍之內。 城域網(MAN) 主要由城域範圍內的各個區域網之間互連構成。 廣域網(WAN) 由距離較遠的區域網與城域網互聯構成的通信網路,通常是除了電腦設 ...
  • 題目:古典問題:3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少? 分析:首先我們要明白題目的意思指的是每個月的兔子總對數;假設將兔子分為小中大三種,兔子從出生後三個月後每個月就會生出一對兔子, 那麼我們假定第一個月的兔子為小兔子,第二個月 ...
  • 1.實例變數和類變數 成員變數 VS 局部變數 局部變數(存儲在方法的棧記憶體中) 形參:方法簽名中定義,由方法調用者賦值,隨方法結束而消亡 方法內局部變數:方法內定義,必須在方法內進行顯示初始化,初始化完成後開始生效,隨方法結束而消亡 代碼塊內局部變數:代碼塊內定義,必須代碼塊內進行顯示初始化,初始 ...
  • 概述 ConcurrentHashMap是HashMap的線程安全版本,使用了分段加鎖的方案,在高併發時有比較好的性能。 本文分析JDK1.7中ConcurrentHashMap的實現。 正文 ConcurrentHashMap概述 HashMap不是線程安全的,要實現線程安全除非加鎖,但這樣性能很 ...
  • 文章出自 http://www.mynawang.com/ 引文 對JVM不瞭解的請先訪問文章《Java虛擬機運行時數據區》,相信會讓你大致瞭解各個記憶體區域的對應功能。接著,我們開始細說虛擬機棧 前文中說到:“虛擬機棧是線程私有的,每創建一個線程,虛擬機就會為這個線程創建一個虛擬機棧,虛擬機棧表示J ...
  • 在菜鳥教程自學了redis,總想著像Mysql一樣,在C/C++中進行對接。於是查詢了一些資料,最後找到了hiredis。然而直接用它的話,難免有點不方便。於是,對其進行封裝。 hiredis直接去git上克隆,地址:https://github.com/redis/hiredis。 下載好之後,由 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...