C#實現像微信PC版一樣的掃碼登錄功能

来源:https://www.cnblogs.com/wjbych/archive/2019/02/21/10410313.html
-Advertisement-
Play Games

現在好些網站都支持掃碼登錄,感覺上安全了很多,但是本地程式掃碼登錄的不多,就用C 實現了一下,需要作如下準備 1. 在官網上申請一個企業微信,有條件的話做個企業認證吧,我們的是認證過的,所以賬號和本地其他系統的賬號是統一的. 2. 在應用中創建一個應用,這個是關鍵,我們掃碼就是和它有關. 3. 點擊 ...


現在好些網站都支持掃碼登錄,感覺上安全了很多,但是本地程式掃碼登錄的不多,就用C#實現了一下,需要作如下準備

  1. 在官網上申請一個企業微信,有條件的話做個企業認證吧,我們的是認證過的,所以賬號和本地其他系統的賬號是統一的.
  2. 在應用中創建一個應用,這個是關鍵,我們掃碼就是和它有關.
  3. 點擊打開自建的應用,裡面有個企業微信授權登錄
  4. 設置好可信的授權回調功能變數名稱,這個功能變數名稱需要是通過ICP備案的,生成的二維碼掃描後是需要跳轉到這個功能變數名稱上的.
  5. 閱讀API文檔構造掃碼登錄鏈接,用戶身份獲取等
    上面這些看起來很多,但是如果做過企業微信號程式開發,那麼就是設置個功能變數名稱的事情.

下麵轉到C#這裡,登錄界面上放一個webbrowser控制項,用於顯示掃碼登錄鏈接,再放一個圖片控制項用於顯示二維碼,等用戶掃了二維碼後就跳轉到自己設置的可信授權功能變數名稱處作身份驗證,驗證通過後就自動登錄.

private void Form_load_Load(object sender, EventArgs e)
{

  web1.Navigate("https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid=wxc&agentid=1000002&redirect_uri=http://wx.qq.com.cn/test/load.aspx&state=STATE");

}

private void web1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{

        if (count == 1) 
        {
            foreach (HtmlElement he in web1.Document.GetElementsByTagName("img"))
            {
                string str = he.GetAttribute("className");
                if (str == "qrcode lightBorder")
                {
                    pic_code.ImageLocation =he.GetAttribute("src"); //獲取微信生成的二維碼圖片,那個網頁中只有兩個圖片,且二維碼是第二張圖片.
                }
            }
        }

       //掃碼通過企業微信驗證後才會執行下麵的代碼.通過檢測網址中是否包含用戶身份的code來判斷是否通過了微信驗證
        string url = web1.Url.ToString();
        string temp = "code";
        bool Flag = url.Contains(temp);
        if (Flag == true)
        {
            cbox_yhm.Text = url;
            cbox_yhm.Text=web1.Document.GetElementById("L_name").OuterText.ToString();
            txt_pwd.Text = "123456";
            web1.Visible = false;
            button1.PerformClick();
        }
        count += 1;
    }

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

-Advertisement-
Play Games
更多相關文章
  • 1. __new__ 和 __init__ 的區別 python 2.x 老式類(預設繼承type) 老式類中沒有__new__類方法(也就是說定義也不會執行,它不是老式類的類方法),__Init__ 作為構造函數,創建實例對象,並初始化。 過程: 類 => __init__() => 實例(sel ...
  • 題意 "題目鏈接" Sol 神仙題Orz 尾碼自動機 + 線段樹合併。。。 首先可以轉化一下模型(想不到qwq):問題可以轉化為統計$B$中每個首碼在$A$中出現的次數。(畫一畫就出來了) 然後直接對$A$串建SAM,線段樹合併維護一下siz就行了 cpp include using namespa ...
  • python多線程與多進程 多線程: 案例:掃描給定網路中存活的主機(通過ping來測試,有響應則說明主機存活) 普通版本: 運行效果如下: 在python裡面,線程的創建有兩種方式,其一使用Thread類創建導入Python標準庫中的Thread模塊 from threading import T ...
  • 也許你已經覺得自己可以熟練使用python並能勝任許多開發任務,所以這篇文章是在浪費你的時間。不過彆著急,我們先從一個例子開始: 猜猜看輸出是什麼?你會說不就是0,1,1麽,真的是這樣嗎? 這是為什麼?如果你還不清楚產生錯誤的原因,那就請繼續往下閱讀吧! 本文索引 LEGB原則 名字隱藏和暫時性死區 ...
  • [toc] 函數定義 函數定義與變數定義相似, 函數示例 小結 函數用關鍵字 func 定義。 定義函數時, 函數名在前,返回類型在後 。 一個函數可以有 多個返回值 。 返回值可以指定一個名字(僅用於非常簡單的函數 )。 函數可以 作為參數 。 Go語言中函數 沒有預設參數、可選參數,函數重載 ...
  • 某些類的邏輯非常複雜,簡化代碼幫助理解下邏輯 ...
  • docker在windows下發力的時候必將取代各種虛擬機,並改變程式員的開發習慣,或許還會改變infra的工作。 概要: 在Windows下搭建開發環境一直是infra(我)頭疼的事情。為瞭解決這個問題,跟老闆,程式員商量得出的解決辦法有以下幾種:1.Mac下開發。優點是搭建環境方便,缺點是需要熟 ...
  • [toc] 條件語句 條件語句用 if 關鍵字來判定條件,如: for省略初始條件(及遞增條件), 相當於while語句 初始條件、結束條件、遞增表達式都省略是是一個死迴圈 Go中沒有while語句 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...