ASP.NET Core2에서 위챗 공식 계정을 자동으로 가져오는 사용자 OpenId

18106 단어
최근에 위챗 공식계정 프로젝트를 할 때 입구를 공식계정 2단계 메뉴에 두어야 한다. 이 메뉴를 클릭한 후 이 프로젝트에 들어가면 프로그램은 자동으로 위챗 공식계정의 API를 통해 사용자의 OpenId를 완성한다.수요는 매우 간단하고 실현해도 복잡하지 않기 때문에 한바탕 고생한 후에 수요가 실현되었다.이를 위해, 이 글을 써서 처음 만나는 친구에게 작은 도움을 드리겠습니다.
 
차리다
낡은 규칙은 시작하기 전에 우리가 먼저 실현된 구성 부분을 간단하게 소개하면 다음과 같다.
위챗 공식 계정 사용자 오픈 ID 자동 가져오기: 이 기능을 수행하려면위챗 공식계정에서 제공하는'홈페이지 권한 수여'인터페이스를 통해 완성할 수 있습니다(홈페이지 설명: snsapi base로 scope에서 발기한 홈페이지 권한 수여는 페이지에 들어온 사용자의 Openid를 얻는 데 사용되며, 묵묵히 권한 수여를 받고 자동으로 리셋 페이지로 넘어갑니다. 사용자가 감지하는 것은 바로 리셋 페이지(왕왕 업무 페이지)로 들어가는 것)입니다. 구체적인 설명은 다음과 같습니다.https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
Lezhima.Site: ASP 기반입니다.NET Core2의 웹 Mvc 보기 프로그램으로 위챗 공식 번호 메뉴 링크를 받는 요청을 모의하고 사용자의 OpenId를 자동으로 가져옵니다.
 
이루어지다
위에서 말한 바와 같이 우리는 이미 전체적인 실현 방향을 분명히 했다. 그러면 다음은 Lezhima를 살펴보자.Site 프로젝트 내의 코드를 구현하십시오.
1. 우선'BasicController'라는 업무 기본 클래스를 만들고'Controller'클래스를 계승합니다.그 역할은 두 가지가 있는데 하나는 OpenId를 정확하게 얻었는지 검증하는 업무를 기본 클래스로 봉인하는 것이고, 다른 업무 컨트롤러가 OpenId를 사용하는 것을 편리하게 하는 것이다.구체적인 코드는 다음과 같습니다. 1 /// 2 /// 3 /// 4 public class BasicController:Controller 5 { 6 // openId 7 protected string CurrentUserOpenId { set; get; } 8 9 public BasicController() 10 { 11 // Cookie openId 12 var openId = Cookies.GetCookieByUser(); 13 // , , 14 if (string.IsNullOrEmpty(openId)) 15 { 16 System.Web.HttpContext.Current.Response.Redirect("/VxinWeb/Index"); 17 return; 18 } 19 20 CurrentUserOpenId = openId; 21 } 22 }
 
2. "VxinWebController"라는 컨트롤러와 View 보기를 다시 만듭니다.위챗 공식 번호 메뉴의 링크 입구를 받아들이고 사용자 OpenId를 자동으로 가져오는 데 사용된다.코드는 다음과 같습니다. 1 /// 2 /// , openId 3 /// 4 /// 5 public class VxinWebController : Controller 6 { 7 public ActionResult Index() 8 { 9 // openid 10 // 11 if (Request.QueryString["code"] != null) 12 { 13 var code = Request.QueryString["code"].ToString(); 14 var openId = VxinUtils.GetOpenID(code); 15 if (string.IsNullOrEmpty(openId))// openId 16 { 17 // , , 18 return View(); 19 } 20 // openId cookie, cookie openId , 21 Cookies.SetUserToCookie(openId); 22 return RedirectToAction("Index", "Home"); 23 } 24 return View(); 25 } 26 }
 
3. 두 번째 단계에서 우리는 위챗 공식번호 API에 대한 작업을 봉인하는 VxinUtils 클래스를 발견했다. 구체적인 코드는 다음과 같다. 1 /// 2 /// 3 /// 4 public class VxinUtils 5 { 6 7 /// 8 /// token 9 /// 10 public static string WeiXinToken { get { return ConfigurationManager.AppSettings["WeiXinToken"].ToString(); } } 11 12 /// 13 /// appID 14 /// 15 public static string AppID { get { return ConfigurationManager.AppSettings["AppID"].ToString(); } } 16 17 18 /// 19 /// Aappsecret 20 /// 21 public static string Appsecret { get { return ConfigurationManager.AppSettings["Appsecret"].ToString(); } } 22 23 24 /// 25 /// access_token 26 /// 27 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); } } 28 29 /// 30 /// code access_token 31 /// 32 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); } } 33 34 35 /// 36 /// 37 /// 38 public static string MENU_POST_URL { get { return "https://api.weixin.qq.com/cgi-bin/menu/create?access_token="; } } 39 40 41 /// 42 /// 43 /// 44 public static string Group_Get_Url { get { return "https://api.weixin.qq.com/cgi-bin/groups/get?access_token="; } } 45 46 47 /// 48 /// 49 /// 50 public static string Group_Update_Url { get { return "https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token="; } } 51 52 53 54 /// 55 /// 56 /// 57 public static string Group_GetUserGroup_Url { get { return "https://api.weixin.qq.com/cgi-bin/groups/getid?access_token="; } } 58 59 /// 60 /// ( scope snsapi_userinfo) 61 /// snsapi_userinfo, access_token openid 。 62 /// https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN 63 /// 64 public static string GetUserUserinfo_Url { get { return "https://api.weixin.qq.com/sns/userinfo?lang=zh_CN&access_token="; } } 65 66 67 /// 68 /// OpenId 69 /// 70 /// 71 /// 72 public static string GetOpenID(string code) 73 { 74 var openid = ""; 75 using (var wl = new WebClient()) 76 { 77 wl.Headers.Add(HttpRequestHeader.Accept, "json"); 78 wl.Headers.Add(HttpRequestHeader.ContentType, "application/json;charset=UTF-8"); 79 wl.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/4.0"); 80 wl.Encoding = Encoding.UTF8; 81 openid = wl.DownloadString(Web_Access_token_URL + code); 82 } 83 if (!string.IsNullOrEmpty(openid)) 84 { 85 var token = JObject.Parse(openid).SelectToken("openid"); 86 if (token != null) 87 openid = token.ToString(); 88 } 89 return openid; 90 } 91 92 }

 

1、 “snsapi_base scope ” , OpenId。

2、 OpenId Cookie , Cookie , OpenId。

 

, , 。 , , !

 

좋은 웹페이지 즐겨찾기