English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MVC 웹 페이지�权한 사용자 OpenId 가져오기

최근 웹 공중플랫폼을 개발하면서 기록을 남겼습니다. 이전에도 개발했었지만, 이번에 개발하면서 다시 잊어버렸습니다. 며칠 동안 어렵게도 기록을 남기게 되었습니다. 

프레임워크가 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(메일을 보내는 경우, #을 @으로 변경하십시오. 신고하시고 관련 증거를 제공하시면, 사이트가 즉시 의심스러운 저작권 내용을 삭제합니다.

좋아하는 것