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

شرح حصول على OpenId المستخدم في صفحة الويب لـ WeChat باستخدام MVC

في الآونة الأخيرة، كنت أطور صفحة الوسائط الاجتماعية، سجلت بعض الملاحظات، وقد كنت قد قمت بتطويرها من قبل، ولكن هذه المرة نسيت ذلك، لذا من الأفضل أن أقوم بإنشاء ملاحظة. 

لاحظ أن الإطار هو MVC لتطوير صفحة الوسائط الاجتماعية. السيناريو هو، في صفحة النمذجة، حصول على openid للمستخدم، إذا كنت ترغب في التحقق من الصفحة، يمكنك دمج صفحة النمذجة فقط. 

أضف الأتي إلى _Layout.cshtml 

<head>
  <meta charset="utf-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> 

إضافة طريقة GetOpenID إلى الكائن AdminUtil 

#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?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[] { '"', ' ', '\'' }); //过滤引号或空格
        }
      }
      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
  } 

ملاحظة: يجب إعداد منطقة التدوير البكري في منصة WeChat

هذا هو نهاية محتوى هذا المقال، نأمل أن يكون قد ساعدكم في التعلم، ونأمل أن تدعموا وتعززوا دروس النفخ.

بيان: محتويات هذا المقال تم جمعها من الإنترنت، ويتمتع المالك الأصلي بحقوق الملكية، ويتم توفير المحتوى من قبل مستخدمي الإنترنت الذين يقدمون المساهمات بشكل تلقائي ويتم تحميلها، ولا يمتلك هذا الموقع حقوق الملكية، ولا يتم تعديل المحتوى بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية مرتبطة. إذا وجدت محتوى يشتبه في حقوق النسخ، فأنت مرحب بك في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @) لتقديم الشكوى، وتقديم الأدلة ذات الصلة، وسيتم حذف المحتوى المزعوم الذي يشتبه في حقوق النسخ على الفور إذا تم التحقق من صحة الشكوى.

سيحبك