PC端用.NET微信開發實作掃碼註冊與登入功能詳解
這篇文章主要介紹了.NET微信開發之PC 端微信掃碼註冊和登入功能實現的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
一、前言
先聲明一下,本文所注重點為實現想法,程式碼及資料庫設計主要為了展現思路,如果對程式碼效率有著苛刻要求的項目切勿照搬。
相信做過微信開發的人授權這塊都沒少做過,但是一般來說我們更多的是為移動端的網站做授權,確切來說是在微信端下做的一個授權。今天遇到的一個問題是,專案支援微信端以及 PC 端,並且開放註冊。要求做到無論在 PC 端註冊或是在微信端註冊之後都可以在另一端登入。也就是說無論 PC 或是微信必須做到"你就是你"(透過某種方式關聯)。
二、尋找解決方案
#以傳統的方式思考,微信端完全可以透過授權進行註冊,但是PC端呢,傳統的方式無非就是填填手機號碼啊,或者Email 等等。如果採用這種方式註冊,會產生下面這的問題
1.我先在微信端授權註冊,那麼如果我要登入PC端還是得進行註冊。
對此解決方案可以為:微信授權註冊後「強制」要求使用者必須填寫基本資訊,如手機號碼、Email 。這樣我們可以透過某種方式為使用者產生PC端登入的帳號密碼.例如以使用者的 nickname 為帳號,手機號碼為密碼,等等方式。
弊端:使用者體驗不好,再者有安全隱患。畢竟你的微信暱稱, Email 或手機號碼都是暴露的。
2.如果我先在 PC 端註冊,我在微信授權的時候怎樣關聯行動端
當然,凡是問題總會有解決方案的。想法如下:
方案一:當使用者在 PC 端註冊後,「強制」 使用者必須填入微信暱稱。以此作為微信授權時的關聯條件。但很遺憾,微信暱稱可以改,不是唯一的怎麼可以用來做關聯?方案一陣亡。
方案二:在微信端授權後,以及在 PC 端註冊後「強制」要求用戶填寫手機號碼以此為關聯。這樣衍生出一個問題,必須確保用戶手機的真實信,沒問題。這個可以透過手機驗證碼來實現(Email也是一樣)。但不妨假設一下有下面這種情況,如果我有兩個手機號碼,PC 端註冊時填一個,微信註冊時填另一個。關聯的了嗎?答案是很遺憾。再者,我在PC 端註冊後我就是不填(筆者把強制打上雙引號的原因),然後我用微信端授權登入一下。好吧,此時將會有兩個資料等著你想辦法去關聯,典型的開發者自挖坑。這種方式某種程度上行得通,但是嚴謹程度是開發者無法接受的。
三、迴歸原點的解決方案
#分析:既然方案上述方案都有問題,我們先把它們都拋到一邊。整理一下思路,讓我們回到問題的根本。關聯的問題,要的是一個唯一識別。唯一識別正如我們的身分證號碼,我們辦理信用卡的時候身分證是必須的,實名制下購買號碼卡,身分證是必須的。假設我們是這系統管理員,那麼我完全可以透過你的身分證號碼查出你手機號碼,銀行卡號碼。
有了上面的思路之後,我們需要做的就是找到一個唯一標識來作為關聯.微信上有個重要的角色 openid。 它跟我們上面提到的身分證號碼有這共同的作用,微信帳號對某一公眾號碼的唯一識別。
微信端的授權拿到 openid 做過微信開發的人都應該沒有問題。問題是怎麼來實現 PC 端 在註冊或登陸的時候拿到 openid。筆者的實現思路如下。 PC 端註冊,或登陸時顯示一個二維碼引導使用者使用微信掃碼,使其跳到授權頁面。這一步驟有一個最關鍵的細節,二維碼請帶一個唯一的授權碼(authCode)。試想一下如果使用者授權後我們能把 openid 以及 authCode 寫入到資料庫。那我們就可以在 PC 端透過某個 API 取得 authCode 所關聯的這個 openid。如果我們做到這點我們就可以知道目前是誰在 PC 端進行掃碼註冊或登入(沒註冊的註冊,有註冊的直接登入)。 是不是突然覺得 so easy. 如果覺得文字比較抽象,請看下面圖示
PC 端微信掃碼登入流程
##核心程式碼
搞清楚了思路和流程接下來我們直接上程式碼啦.開發思路是共通的,開發語言就請各顯神通啦。
掃碼登入頁後台程式碼
public ActionResult Login() { //如果已登录,直接跳转到首页 if (User.Identity.IsAuthenticated) return RedirectToAction("Index", "Home"); string url = Request.Url.Host; string uuid = Guid.NewGuid().ToString(); ViewBag.url = "http://" + url + "/home/loginfor?uuid=" + uuid;//构造授权链接 ViewBag.uuid = uuid;//保存 uuid return View(); }
產生二維碼採用外掛程式jquery.qrcode.js,想詳細了解的朋友請移步Github。 這裡要注意的一點是,該外掛可以指定二維碼的產生方式,canvas 或table 請需要支援IE 的朋友指定使用table 產生
程式碼如下:
jQuery('#qrcode').qrcode({ render : "table", text : "http://baidu.com" });
回歸正題,登入頁面的主要程式碼如下
<!--生成二维码的容器 p--> <p id="qrcode-container"> </p> <script src="~/Plugins/Jquery/jquery-1.9.1.min.js"></script> <script src="~/Plugins/jquery-qrcode/jquery.qrcode.min.js"></script> <script> jQuery(function () { //生成二维码 jQuery('#qrcode-container').qrcode("@ViewBag.url"); //轮询判断用户是否授权 var interval = setInterval(function () { $.post("@Url.Action("UserLogin","Home")", { "uuid": "@ViewBag.uuid" }, function (data, status) { if ("success" == status) { //用户成功授权=>跳转 if ("success" == data) { window.location.href = '@Url.Action("Index", "Home")'; clearInterval(interval); } } }); }, 200); }) </script>
public string UserLogin(string uuid) { //验证参数是否合法 if (string.IsNullOrEmpty(uuid)) return "param_error"; WX_UserRecord user = db.WX_UserRecord.Where(u => u.uuId == uuid).FirstOrDefault(); if (user == null) return "not_authcode"; //写入cookie FormsAuthentication.SetAuthCookie(user.OpenId, false); //清空uuid user.uuId = null; db.SaveChanges(); return "success"; }
微信端授權Action
public ActionResult Loginfor(string uuid) { #region 获取基本信息 - snsapi_userinfo /* * 创建微信通用类 - 这里代码比较复杂不在这里贴出 * 迟点我会将整个 Demo 稍微整理放上 Github */ WechatUserContext wxcontext = new WechatUserContext(System.Web.HttpContext.Current, uuid); //使用微信通用类获取用户基本信息 wxcontext.GetUserInfo(); if (!string.IsNullOrEmpty(wxcontext.openid)) { uuid = Request["state"]; //判断数据库是否存在 WX_UserRecord user = db.WX_UserRecord.Where(u => u.OpenId == wxcontext.openid).FirstOrDefault(); if (null == user) { user = new WX_UserRecord(); user.OpenId = wxcontext.openid; user.City = wxcontext.city; user.Country = wxcontext.country; user.CreateTime = DateTime.Now; user.HeadImgUrl = wxcontext.headimgurl; user.Nickname = wxcontext.nickname; user.Province = wxcontext.province; user.Sex = wxcontext.sex; user.Unionid = wxcontext.unionid; user.uuId = uuid; db.WX_UserRecord.Add(user); } user.uuId = uuid; db.SaveChanges(); } #endregion return View(); }
#最後附上資料庫表格設計
沒什麼特別的,就是微信回傳的各個參數加多一個我們自訂的uuId
微信參數說明詳情請見微信開發者文件
運行效果
以上是PC端用.NET微信開發實作掃碼註冊與登入功能詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

當連接到Windows11/10PC上的Wi-Fi路由器或行動熱點時,如果遇到錯誤的「存取點暫時滿」的問題,這通常是由於網路過載或連接裝置數量過多引起的。為了解決這個問題並成功連接到互聯網,您可以嘗試以下方法:1.等待一段時間,讓其他設備斷開連接後再嘗試連接。 2.重新啟動Wi-Fi路由器或行動熱點,以便清除網路快取並重新分配IP位址。 3.確保您的PC的Wi-Fi適配器驅動程式是最新的,可以透過裝置管理員來檢查更新。 4.嘗試在不同的時間連接,避開尖峰時段可能會有更好的連線機會。 5.考慮增AccessP

PC是個常見的縮寫詞,它代表 "Personal Computer"的意思。個人電腦是一種具有普遍應用的運算設備,可用於處理和儲存資料、運行軟體程式和連接到互聯網。在數位化和資訊化的時代,個人電腦不僅是一種工具,也是一種連結世界的窗口,更是人們獲取知識、豐富生活和實現個人發展的重要工具。
![Windows PC持續引導至BIOS[修復程式]](https://img.php.cn/upload/article/000/887/227/171012121854600.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
如果您的WindowsPC經常進入BIOS介面,這可能會導致使用困難。每次開機都被BIOS螢幕所困擾,重新啟動也無濟於事。如果您正面臨這個問題,那麼本文中提供的解決方案將會對您有所幫助。為什麼我的電腦一直在BIOS中啟動?您的電腦在BIOS模式下經常重新啟動可能涉及多種原因,例如啟動順序設定不當、SATA電纜受損、連接不牢固、BIOS配置錯誤或硬碟故障等。修正WindowsPC持續引導進入BIOS的問題如果您的WindowsPC不斷引導至BIOS,請使用下列修復程式。檢查您的引導順序重新拔插內

SamsungFlow是一個方便實用的工具,可以讓您輕鬆連接Galaxy手機到WindowsPC。透過SamsungFlow,您可以輕鬆地在裝置之間分享內容,同步通知,鏡像智慧型手機等。本文將介紹如何在Windows電腦上使用SamsungFlow。如何在WindowsPC上使用智慧型手機串流要使用SamsungFlow連接WindowsPC和GalaxyPhone,需要確保您的Galaxy智慧型手機和平板電腦運行Android7.0或更高版本,以及您的WindowsPC運行Windows10或更高版

本文將教您如何一次將所有OneDrive檔案下載到您的PC。 OneDrive是一個強大的雲端儲存平台,方便用戶隨時隨地存取其檔案。有時,使用者可能需要在本機備份檔案或離線存取。繼續閱讀以了解如何輕鬆完成此操作。如何一次將所有OneDrive檔案下載到PC?請按照以下步驟一次將所有OneDrive檔案下載到您的WindowsPC:啟動Onedrive並導航到我的檔案。在OneDrive上上傳的所有文件都將在此處提供。按CTRL+A選擇所有文件,或選取核取方塊中所有項目的切換選擇。點擊頂部的下載選項,

說起來我們的洋垃圾系列也做了很多期了,不過之前大多是手機和組裝PC,前者可玩性一般,後者則是不確定性拉滿。例如我們上次花300裝的電腦,現在已經進入不停掉驅動的狀態。不過,「撿破爛」這種事情本來就如此,風險與收益並存才是常態。像這次我「撿」回來的華碩ChromeBox,本來是想將其製作成一部Macmini(偽),但是在折騰的過程中遇到了許多意料之外的問題,沒能達成預定目標。我最終只能退而求其次,選擇給它刷個Windows。雖然刷黑蘋果的嘗試倒在了最後一步,不過整個過程中獲得了很多樂趣。而且作為

我們深知MicrosoftWindows11是個功能齊全且設計吸引人的作業系統。但是,用戶一直要求Windows11Lite版本。儘管它提供了重大改進,但Windows11是一個資源匱乏的作業系統,它可能很快就會使舊機器混亂到無法順利運作的地步。本文將解決您最常問的關於是否有Windows11Lite版本以及是否可以安全下載的問題。跟著!有Windows11Lite版本嗎?我們正在談論的Windows11Lite21H2版本是由Neelkalpa的T

如果說2023年是大家公認的AI元年,那麼2024年很可能就是AI大模型普及的關鍵一年。在過去的一年中,大量的AI大模型、大量的AI應用橫空出世,Meta、Google等廠商也開始面向民眾推出自己的在線/本地大模型,類似於“AI人工智能”這樣遙不可及的概念,就這樣突然來到了人們身邊。如今人們在生活中越來越多地接觸到人工智慧,如果你仔細分辨,你會發現,你所能接觸到的各類AI應用,他們幾乎都部署在「雲端」上。如果想要搭建一臺本地運行大模型的設備,那麼硬體都是售價5000元以上的全新AIPC,對於普通
