ASP.NET Core 2 위 챗 공식 번 호 를 조용히 가 져 오 는 사용자 OpenId 인 스 턴 스 코드

머리말
최근 위 챗 공식 번 호 를 만 드 는 프로젝트 에 서 는 공식 번호 2 급 메뉴 에 입 구 를 배치 해 야 합 니 다.이 메뉴 링크 를 클릭 한 후 이 항목 에 들 어가 면 프로그램 은 위 챗 공식 번호 API 를 통 해 사용자 의 OpenId 를 자동 으로 가 져 옵 니 다.수 요 는 매우 간단 하고 실현 하기 도 복잡 하지 않 아서 한바탕 고생 한 후에 수요 가 실현 되 었 다.이 를 위해,이 글 을 쓰 는 것 은 처음 만난 친구 에 게 작은 도움 이 될 뿐이다.
준비 하 다.
낡은 규칙,시작 하기 전에 우 리 는 먼저 실현 하 는 구성 부분 을 간단하게 소개 한다.다음 과 같다.
위 챗 공중 번호 침묵 획득 사용자 OpenId:이 기능 을 실현 하려 면 위 챗 공중 번호 가 제공 하 는'웹 페이지 권한 수여'인 터 페 이 스 를 통 해 완성 할 수 있 습 니 다(홈 페이지 설명:snsapibase 가 scope 에서 시작 한 웹 페이지 권한 수 여 는 페이지 에 들 어간 사용자 의 openid 를 가 져 오 는 데 사용 되 며,침묵 권한 수 여 를 받 고 자동 으로 리 셋 페이지 로 이동 합 니 다.사용자 가 감지 하 는 것 은 바로 리 셋 페이지(흔히 업무 페이지)에 들 어간 것 이다.구체 적 으로 설명 하면 다음 과 같다.https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
Lezhima.site:ASP.NET Core 2 를 기반 으로 한 웹 Mvc 테이프 보기 프로그램 으로 위 챗 공식 메뉴 링크 의 요청 을 받 아들 이 고 사용자 의 OpenId 를 자동 으로 가 져 옵 니 다.
준비 하 다.
위 에서 말 한 바 와 같이 우 리 는 전체적인 실현 방향 을 잘 알 고 있 습 니 다.그러면 다음은 Lezhima.Site 프로젝트 의 코드 실현 을 살 펴 보 겠 습 니 다.
1.우선 우 리 는'Basic Controller'라 는 업무 기 류 를 만 들 고'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();
	}
}
3.두 번 째 단계 에서 우 리 는 VxinUtils 류 가 있 는 것 을 발 견 했 습 니 다.이 종 류 는 위 챗 공식 번호 API 에 대한 조작 을 봉 인 했 습 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.

/// <summary>
///         
/// </summary>
public class VxinUtils
{

	/// <summary>
	///   token
	/// </summary>
	public static string WeiXinToken { get { return ConfigurationManager.AppSettings["WeiXinToken"].ToString(); } }

	/// <summary>
	///   appID
	/// </summary>
	public static string AppID { get { return ConfigurationManager.AppSettings["AppID"].ToString(); } }


	/// <summary>
	///   Aappsecret
	/// </summary>
	public static string Appsecret { get { return ConfigurationManager.AppSettings["Appsecret"].ToString(); } }


	/// <summary>
	///   access_token  
	/// </summary>
	public static string Access_token_URL { get { return string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", AppID, Appsecret); } }

	/// <summary>
	///   code      access_token  
	/// </summary>
	public static string Web_Access_token_URL { get { return string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&grant_type=authorization_code&code=", AppID, Appsecret); } }


	/// <summary>
	///           
	/// </summary>
	public static string MENU_POST_URL { get { return "https://api.weixin.qq.com/cgi-bin/menu/create?access_token="; } }


	/// <summary>
	///           
	/// </summary>
	public static string Group_Get_Url { get { return "https://api.weixin.qq.com/cgi-bin/groups/get?access_token="; } }


	/// <summary>
	///           
	/// </summary>
	public static string Group_Update_Url { get { return "https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token="; } }



	/// <summary>
	///             
	/// </summary>
	public static string Group_GetUserGroup_Url { get { return "https://api.weixin.qq.com/cgi-bin/groups/getid?access_token="; } }

	/// <summary>
	///       ( scope  snsapi_userinfo)
	///           snsapi_userinfo,          access_token openid       。
	/// https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
	/// </summary>
	public static string GetUserUserinfo_Url { get { return "https://api.weixin.qq.com/sns/userinfo?lang=zh_CN&access_token="; } }


	/// <summary>
	///      OpenId
	/// </summary>
	/// <param name="code"></param>
	/// <returns></returns>
	public static string GetOpenID(string code)
	{
		var openid = "";
		using (var wl = new WebClient())
		{
			wl.Headers.Add(HttpRequestHeader.Accept, "json");
			wl.Headers.Add(HttpRequestHeader.ContentType, "application/json;charset=UTF-8");
			wl.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/4.0");
			wl.Encoding = Encoding.UTF8;
			openid = wl.DownloadString(Web_Access_token_URL + code);
		}
		if (!string.IsNullOrEmpty(openid))
		{
			var token = JObject.Parse(openid).SelectToken("openid");
			if (token != null)
				openid = token.ToString();
		}
		return openid;
	}

}
총결산
1."snsapi 기반"base 가 scope 를 위 한 웹 페이지 권한 수여'의 위 챗 공중 번호 방안 은 사용자 의 침묵 권한 수여 와 사용자 의 OpenId 를 쉽게 실현 할 수 있 습 니 다.
2.획득 한 OpenId 를 Cookie 에 기록 하고 하나의 업무 기본 클래스 를 패키지 하여 Cookie 의 읽 기와 판단 을 완성 함으로써 다른 업무 클래스 가 OpenId 를 편리 하 게 사용 할 수 있 습 니 다.
자,이상 이 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기