针对“.NET微信开发之PC 端微信扫码注册和登录功能实现”的攻略,我将提供完整的解释与示例,以方便大家理解。
目录
- 前言
- 技术栈
- 环境准备
- 需求分析
- 技术实现
- 总结
前言
微信是目前国内最受欢迎的社交软件之一,在PC端使用微信成为了不小的需求。为此,我们将为大家介绍使用.NET技术实现PC端微信扫码注册和登录的完整攻略。
技术栈
- .NET Framework/ .NET Core
- ASP.NET MVC/ASP.NET Core
- Entity Framework/Entity Framework Core
- 微信开放平台
环境准备
- 安装Visual Studio 2017或者Visual Studio 2019
- 安装.NET Framework或.NET Core
- 安装微信开发者工具
- 建立微信公众平台账号
需求分析
我们需要实现这样一个流程:用户在PC端打开我们的网站,扫描微信二维码以注册或登录。为此,我们需要考虑以下事情:
- 用户扫描二维码时,需要先进行微信授权登陆,获取用户信息
- 如果用户是新用户,需要进行微信授权注册,同时在本地数据库中存储用户信息,登录则直接从本地进行验证即可
- 如果用户已经注册,则直接从数据库中进行验证,进行登录操作
技术实现
首先我们需要在微信开发者工具中建立一个网站应用并获取到AppID和AppSecret。同时,我们还需要获取到微信授权登陆、授权注册、获取用户详细信息的API接口的调用地址,这些可以在微信开放平台获取。
接下来,我们在本地导入项目,这里以使用ASP.NET Core为例:
-
创建一个空的ASP.NET Core项目,添加Nuget包:Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Tools、Microsoft.AspNetCore.Authentication.Cookies
-
添加Model模型,这里我们以已经在微信开放平台上注册并授权应用的用户的openid作为用户的唯一标识,示例如下:
public class User
{
public int Id { get; set; }
public string OpenId { get; set; }
public string NickName { get; set; }
}
- 添加DbContext
public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
{
}
public DbSet<User> Users { get; set; }
}
- 在Startup.cs中配置数据库连接,添加MVC中间件、Cookie鉴权中间件
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddMvc();
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseAuthentication();
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
- 编写授权登陆、授权注册、获取用户信息的控制器,并在前端页面添加微信扫码组件
关于微信扫码的前端部分,可以使用微信提供的开源JS-SDK进行封装。
下面是接受微信授权登陆回调的方法
public async Task<IActionResult> WeChatLogin(string code, string state)
{
var openid = await GetOpenID(code);
if (openid != null)
{
var user = await _context.Users.FirstOrDefaultAsync(u => u.OpenId == openid);
if (user != null)//登录成功
{
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, CreateUserClaims(user));
//到用户个人中心页面
return Redirect("/UserCenter/Index");
}
else
{
//跳到授权注册页面
ViewData["OpenId"] = openid;
return View("~/Views/User/WeChatRegister.cshtml");
}
}
else
{
return Ok("授权登录失败了");
}
}
下面是微信授权注册的方法
public async Task<IActionResult> WeChatRegister(string openId, string username, string password)
{
//用户名不能重复
var user = await _context.Users.FirstOrDefaultAsync(u => u.NickName == username);
if (user == null)
{
var newUser = new User
{
OpenId = openId,
NickName = username,
};
_context.Users.Add(newUser);
await _context.SaveChangesAsync();
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, CreateUserClaims(newUser));
return Redirect("/UserCenter/Index");
}
else
{
ViewData["Error"] = "用户名已经被注册了";
ViewData["OpenId"] = openId;
return View("~/Views/User/WeChatRegister.cshtml");
}
}
下面是获取用户信息的方法
public async Task<IActionResult> WeChatUserInfo(string code, string state)
{
var openid = await GetOpenID(code);
var user = await _context.Users.FirstOrDefaultAsync(u => u.OpenId == openid);
if (user != null)
{
var result = new JsonResult(user) { ContentType = "application/json" };
return result;
}
else
{
return NotFound();
}
}
总结
至此,我们就实现了在PC端通过微信扫码进行注册和登录的流程。在遇到微信登陆的需求时,我们可以使用上面提供的方法来快速集成。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.NET微信开发之PC 端微信扫码注册和登录功能实现 - Python技术站