ASP.NET Core2에서 위챗 공식 계정을 자동으로 가져오는 사용자 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。
, , 。 , , !
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.