首頁 微信小程式 微信開發 PC端用.NET微信開發實作掃碼註冊與登入功能詳解

PC端用.NET微信開發實作掃碼註冊與登入功能詳解

Apr 26, 2017 pm 02:51 PM
pc

這篇文章主要介紹了.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 端微信掃碼登入流程





##核心程式碼

搞清楚了思路和流程接下來我們直接上程式碼啦.開發思路是共通的,開發語言就請各顯神通啦。

說明:下面程式碼以C# 語言為例,採用MVC + EF (註:uuid 等價於我們上述的authCode)


掃碼登入頁後台程式碼

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(&#39;#qrcode-container&#39;).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 = &#39;@Url.Action("Index", "Home")&#39;;
clearInterval(interval);
}
}
});
}, 200);
})
</script>
登入後複製

輪詢判斷使用者是否授權API 程式碼

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


微信參數說明詳情請見微信開發者文件

運行效果

####1.掃碼登入頁面### ###############2.請求使用者授權###################3.使用者確認授權######## ###########4.PC 端登入完成################

以上是PC端用.NET微信開發實作掃碼註冊與登入功能詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

如何在Windows PC上解決存取點臨時滿錯誤 如何在Windows PC上解決存取點臨時滿錯誤 Mar 16, 2024 pm 03:19 PM

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

pc是什麼意思網路用語 pc是什麼意思網路用語 Aug 10, 2023 pm 04:34 PM

PC是個常見的縮寫詞,它代表 "Personal Computer"的意思。個人電腦是一種具有普遍應用的運算設備,可用於處理和儲存資料、運行軟體程式和連接到互聯網。在數位化和資訊化的時代,個人電腦不僅是一種工具,也是一種連結世界的窗口,更是人們獲取知識、豐富生活和實現個人發展的重要工具。

Windows PC持續引導至BIOS[修復程式] Windows PC持續引導至BIOS[修復程式] Mar 11, 2024 am 09:40 AM

如果您的WindowsPC經常進入BIOS介面,這可能會導致使用困難。每次開機都被BIOS螢幕所困擾,重新啟動也無濟於事。如果您正面臨這個問題,那麼本文中提供的解決方案將會對您有所幫助。為什麼我的電腦一直在BIOS中啟動?您的電腦在BIOS模式下經常重新啟動可能涉及多種原因,例如啟動順序設定不當、SATA電纜受損、連接不牢固、BIOS配置錯誤或硬碟故障等。修正WindowsPC持續引導進入BIOS的問題如果您的WindowsPC不斷引導至BIOS,請使用下列修復程式。檢查您的引導順序重新拔插內

如何在Windows PC上使用Samsung Flow 如何在Windows PC上使用Samsung Flow Feb 19, 2024 pm 07:54 PM

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

如何一次將所有OneDrive檔案下載到PC 如何一次將所有OneDrive檔案下載到PC Feb 19, 2024 pm 06:51 PM

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

低價Chrome主機歷險記:裝不了黑蘋果,算是合格的PC 低價Chrome主機歷險記:裝不了黑蘋果,算是合格的PC Jul 11, 2024 pm 04:38 PM

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

Windows 11 Lite:它是什麼以及如何在您的 PC 上安裝它 Windows 11 Lite:它是什麼以及如何在您的 PC 上安裝它 Apr 14, 2023 pm 11:19 PM

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

我花300塊組裝的電腦,成功跑通了本地大模型 我花300塊組裝的電腦,成功跑通了本地大模型 Apr 12, 2024 am 08:07 AM

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

See all articles