首页 > 编程 > .NET > 正文

ASP.NET Core2静默获取微信公众号的用户OpenId实例代码

2024-07-10 12:48:39
字体:
来源:转载
供稿:网友

前言

最近在做个微信公众号的项目,需要将入口放置在公众号二级菜单内,通过点击该菜单链接后进入到该项目中去,进入到项目后程序会自动通过微信公众号的API完成用户的OpenId获取。需求很简单,实现起来也不复杂,于是在一番折腾后需求实现了。为此,写下此文仅为初次接触的朋友提供个小小的帮助。

准备

老规矩,在开始动手前,咱们先简单介绍下实现的组成部分,如下:

微信公众号静默获取用户OpenId:要实现该功能,可以通过微信公众号提供的“网页授权”接口完成(官网描述:以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)),具体说明在此:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

Lezhima.Site:是一个基于ASP.NET Core2的Web Mvc带视图的程序,用来模拟接受微信公众号菜单链接的请求,并自动获取用户的OpenId。

准备

如上面所述,我们已经清楚了整个实现思路,那么下面就来看看Lezhima.Site项目内的代码实现吧:

1、首先我们先创建一个名为“BasicController”的业务基类,并继承“Controller”类。其作用有两个,一是将验证是否正确获取OpenId的业务封装成基类,二是方便其它业务控制器使用OpenId。具体代码如下:

/// <summary>/// 业务基类/// </summary>public class BasicController:Controller{	//当前用户openId	protected string CurrentUserOpenId { set; get; }	public BasicController()	{		//从Cookie中获取当前用户的openId		var cookie = Cookies.GetCookieByUser();		//如果没有,则导航到指定提示页,需要用户关闭后重新进入		if (string.IsNullOrEmpty(cookie))		{			System.Web.HttpContext.Current.Response.Redirect("/VxinWeb/Index");			return;		}		CurrentUserOpenId = cookie;	}}

2、再创建一个名为“VxinWebController”的控制器与View视图。其作用是用来接受来自微信公众号菜单内的链接入口,并自动完成获取用户OpenId。代码如下:

/// <summary>/// 此页面用于对外微信菜单地址,用于获取用户openId/// 这是本系统网页的入口/// </summary>public class VxinWebController : Controller{	public ActionResult Index()	{		//获取当前进到本系统的微信用户的openid		//该请求从微信那边过来		if (Request.QueryString["code"] != null)		{			var code = Request.QueryString["code"].ToString();			var openId = VxinUtils.GetOpenID(code);			if (openId == null)//没有获取到openId			{				//返回当前视图,需要提示用户关闭窗口,尝试重新进入				return View();			}			//将openId放入cookie,放到cookie之前需将openId进行加密,取出来后再解密			Cookies.SetUserToCookie(openId);			return RedirectToAction("Index", "Home");		}		return View();	}}            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表