English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
최근 웹 공중플랫폼을 개발하면서 기록을 남겼습니다. 이전에도 개발했었지만, 이번에 개발하면서 다시 잊어버렸습니다. 며칠 동안 어렵게도 기록을 남기게 되었습니다.
프레임워크가 MVC로 개발된 웹 공중플랫폼입니다. 시나리오는, 템플릿 페이지에서 사용자 openid을 가져오고,��证을 수행할 페이지에 템플릿 페이지를 통합하는 것입니다.
_Layout.cshtml에 다음 코드를 추가하세요
<head> <meta charset="utf-8">-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>@ViewBag.Title - My ASP.NET Application</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") @{ var code = HttpContext.Current.Request["code"]; Log.logmsg(code); string urlpath = HttpContext.Current.Request.Url.AbsoluteUri.ToString(); ViewBag.at = AdminUtil.GetOpenID(urlpath, code); } </head>
AdminUtil 클래스에 GetOpenID 메서드를 추가합니다
#region OpenID을 가져오기 /// <summary> /// OpenID을 가져오기 /// </summary> public static string GetOpenID(string redirect_url, string code) { string AppID = WXModel.AppID; string AppSecret = WXModel.AppSecret; string openid = ""; openid = WXApi.GetOpenID(AppID, redirect_url, code, AppSecret); return openid; } #endregion
WXApi 클래스에 GetOpenID 메서드를 추가
#region OpenId을 가져오기 /// <summary> /// OpenId을 가져오기 /// </summary> public static string GetOpenID(string appid, string redirect_url, string code, string screct) { string strJson = ""; if (string.IsNullOrEmpty(code)) { redirect_url = HttpUtility.UrlEncode(redirect_url); HttpContext.Current.Response.Redirect(string.Format("https://open.weixin.qq.com/connect/oauth2/authorize#63;appid={0}&redirect_uri={1&response_type=code&scope=snsapi_base&state={2})#wechat_redirect", appid, redirect_url, new Random().Next(1000, 200000).ToString())); } else { strJson = HttpRequestUtil.RequestUrl(string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1&code={2&grant_type=authorization_code", appid, screct, code)); } return Tools.GetJsonValue(strJson, "openid"); } #endregion
public static class WXModel { public static string access_token; public static string AppID; public static string AppSecret; }
/// <summary> /// 도구 클래스 /// </summary> public class Tools { #region Json 문자열의 특정 점의 값을 가져옵니다 /// <summary> /// Json 문자열의 특정 점의 값을 가져옵니다 /// </summary> public static string GetJsonValue(string jsonStr, string key) { string result = string.Empty; if (!string.IsNullOrEmpty(jsonStr)) { key = "\"" + key.Trim('"') + "\""; int index = jsonStr.IndexOf(key) + key.Length + 1; if (index > key.Length + 1) { //좌표를 먼저 자르고, 마지막이면 괄호를 자르고, 가장 작은 값을 가져옵니다 int end = jsonStr.IndexOf(',', index); if (end == -1) { end = jsonStr.IndexOf('}', index); } result = jsonStr.Substring(index, end - index); result = result.Trim(new char[] { '"', ' ', '\'' }); //quoote mark 또는 공백 필터링 } } return result; } #endregion }
public class HttpRequestUtil { #region 요청 URL, 데이터를 전송하지 않음 /// <summary> /// 요청 URL, 데이터를 전송하지 않음 /// </summary> public static string RequestUrl(string url) { return RequestUrl(url, "POST"); } #endregion #region 요청 URL, 데이터를 전송하지 않음 /// <summary> /// 요청 URL, 데이터를 전송하지 않음 /// </summary> public static string RequestUrl(string url, string method) { // 설정 매개변수 HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; CookieContainer cookieContainer = new CookieContainer(); request.CookieContainer = cookieContainer; request.AllowAutoRedirect = true; request.Method = method; request.ContentType = "text/html"; request.Headers.Add("charset", "utf-8"); //发送请求并获取相应回应数据 HttpWebResponse response = request.GetResponse() as HttpWebResponse; //直到request.GetResponse()程序才开始向目标网页发送Post请求 Stream responseStream = response.GetResponseStream(); StreamReader sr = new StreamReader(responseStream, Encoding.Default); //返回结果网页(html)代码 string content = sr.ReadToEnd(); return content; } #endregion }
주의: 공众 플랫폼에서 권한 복귀 도메인을 설정해야 합니다
이것이 본 글의 전체 내용입니다. 많은 도움이 되었기를 바랍니다. 또한, 고대로안 교본에 많은 지원을 부탁드립니다.
선언: 본 내용은 인터넷에서 가져왔으며, 저작권자에게 소유됩니다. 인터넷 사용자가 자발적으로 기여하고 업로드한 내용이며, 이 사이트는 소유권을 가지지 않으며, 인공 편집 처리를 하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 문제가 의심되는 내용이 있으면, notice#w 메일을 보내 주시기 바랍니다.3codebox.com(메일을 보내는 경우, #을 @으로 변경하십시오. 신고하시고 관련 증거를 제공하시면, 사이트가 즉시 의심스러운 저작권 내용을 삭제합니다.