위 챗 오픈 플랫폼 의 사이트 권한 부여 위 챗 로그 인 기능

1 위 챗 오픈 플랫폼:https://open.weixin.qq.com/
2 위 챗 공식 강좌:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN

3.pc 페이지 표시
4.공식 적 으로 제공 한 문 서 를 통 해 우 리 는 모두 4 단계 로 나 뉜 다 는 것 을 알 수 있다.
STEP 1:CODE 요청
STEP 2:code 로 access 획득token
STEP 3:accesstoken 호출 인터페이스
STEP 4:사용자 개인 정보 획득(UnionID 메커니즘)
api:핵심 코드

public class weixin_helper
 {
  public weixin_helper()
  {
  }
  /// <summary>
  ///   AppID AppSecret  access token(       2  )
  /// </summary>
  /// <returns>Dictionary</returns>
  public static Dictionary<string, object> get_access_token()
  {
   //      
   oauth_config config = oauth_helper.get_config(2);
   string send_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" +
        config.oauth_app_id + "&secret=" + config.oauth_app_key + "";
   //        
   string result = Utils.HttpGet(send_url);
   if (result.Contains("errmsg"))
   {
    return null;
   }
   try
   {
    Dictionary<string, object> dic = JsonConvert.DeserializeObject<Dictionary<string, object>>(result);
    return dic;
   }
   catch
   {
    return null;
   }
  } /// <summary>
  ///      Access Token(       2  )
  /// </summary>
  /// <param name="code">  Authorization Code</param>
  /// <param name="state">  CSRF  ,             </param>
  /// <returns>Dictionary</returns>
  public static Dictionary<string, object> get_access_token(string code, string state)
  {
   //      
   oauth_config config = oauth_helper.get_config(2);
   string send_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" +
        config.oauth_app_id + "&secret=" + config.oauth_app_key + "&code="+code+"&grant_type=authorization_code";
   //        
   string result = Utils.HttpGet(send_url);
   if (result.Contains("errmsg"))
   {
    return null;
   }
   try
   {
    Dictionary<string, object> dic = JsonConvert.DeserializeObject<Dictionary<string, object>>(result);
    return dic;
   }
   catch
   {
    return null;
   }
  }
  /// <summary>
  ///   access_token  access_token    
  /// </summary>
  /// <param name="access_token"></param>
  /// <returns>true     </returns>
  public static bool check_access_token(string access_token)
  {
   //      
   oauth_config config = oauth_helper.get_config(2);
   string send_url = "https://api.weixin.qq.com/sns/auth?access_token=" + access_token + "&openid=" + config.oauth_app_id;
   //        
   string result = Utils.HttpGet(send_url);
   try
   {
    Dictionary<string, object> dic = JsonConvert.DeserializeObject<Dictionary<string, object>>(result);
    if (dic.ContainsKey("errmsg"))
    {
     if (dic["errmsg"].ToString()=="ok")
     {
      return true;
     }
     else
     {
      return false;
     }
    }
    return false;
   }
   catch
   {
    return false;
   }
  }
  /// <summary>
  ///  fresh_token      refresh_token    refresh_token
  /// </summary>
  /// <param name="refresh_token">refresh_token</param>
  /// <returns>Dictionary</returns>
  public static Dictionary<string, object> get_refresh_token(string refresh_token)
  {
   //      
   oauth_config config = oauth_helper.get_config(2);
   string send_url =
    "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=" +
        config.oauth_app_id + "&grant_type=refresh_token&refresh_token=" + refresh_token;
   //        
   string result = Utils.HttpGet(send_url);
   if (result.Contains("errmsg"))
   {
    return null;
   }
   try
   {
    Dictionary<string, object> dic = JsonConvert.DeserializeObject<Dictionary<string, object>>(result);
    return dic;
   }
   catch
   {
    return null;
   }
  }
  /// <summary>
  ///              
  /// </summary>
  /// <param name="access_token">   Access Token</param>
  /// <param name="open_id">  openid</param>
  /// <returns>Dictionary</returns>
  public static Dictionary<string, object> get_user_info(string access_token, string open_id)
  {
   //      
   oauth_config config = oauth_helper.get_config(2);
   //         
   string send_url = "https://api.weixin.qq.com/sns/userinfo?access_token="+access_token+"&openid="+open_id;
   //        
   string result = Utils.HttpGet(send_url);
   if (result.Contains("errmsg"))
   {
    return null;
   }
   //    JSON
   Dictionary<string, object> dic = JsonHelper.DataRowFromJSON(result);
   return dic;
  }
 }
컨트롤 러 의 핵심 코드:

#region     
  /// <summary>
  ///     
  /// </summary>
  public ActionResult WeChat()
  {
   //      
   oauth_config config = oauth_helper.get_config(2); //  id
   if (config == null)
   {
    return Content("   ,          API  !");
   }
   string state = Guid.NewGuid().ToString().Replace("-", "");
   Session["oauth_state"] = state;
   string send_url =
    "https://open.weixin.qq.com/connect/qrconnect?appid=" + config.oauth_app_id +
        "&redirect_uri=" + Utils.UrlEncode(config.return_uri.ToLower()) +
        "&response_type=code&scope=snsapi_login&state=" + state +
        "#wechat_redirect";
   //    
   return Redirect(send_url); //                 
  }
  /// <summary>
  ///       action
  /// </summary>
  public ActionResult WeChatReturnUrl(string state, string code)
  {
   //      
   string access_token = string.Empty;
   string expires_in = string.Empty;
   string client_id = string.Empty;
   string openid = string.Empty;
   string refresh_token = string.Empty;
   if (Session["oauth_state"] == null || Session["oauth_state"].ToString() == "" ||
    state != Session["oauth_state"].ToString() || string.IsNullOrEmpty(code))//         code  state           
   {
    return Content("   ,state    !");
   }
   //   :  code   Access Token  openid
   Dictionary<string, object> dic1 = weixin_helper.get_access_token(code, state);
   if (dic1 == null || !dic1.ContainsKey("access_token"))
   {
    return Content("    :,    Access Token,   App Key    !");
   }
   if (dic1 == null || !dic1.ContainsKey("openid"))
   {
    if (dic1.ContainsKey("errmsg"))
    {
     return Content("errcode:" + dic1["errcode"] + ",errmsg:" + dic1["errmsg"]);
    }
    else
    {
     return Content("   ,        Openid!");
    }
   }
   access_token = dic1["access_token"].ToString();//  access_token
   expires_in = dic1["expires_in"].ToString();//      
   refresh_token = dic1["refresh_token"].ToString();//        access_token   
   openid = dic1["openid"].ToString();//      openid
   //           
   Session["oauth_name"] = "webchat";
   Session["oauth_access_token"] = access_token;
   Session["oauth_openid"] = openid;
   Session["oauth_refresh_token"] = refresh_token;
   #region todo                 
   #endregion
   //   :  Access Token  openid          
   //Dictionary<string, object> dic2 = weixin_helper.get_user_info(access_token,openid);
   //   :       
   return Content(WeChatResultJson());
  }
  /// <summary>
  ///       action,       
  /// </summary>
  public string WeChatResultJson()
  {
   string oauth_access_token = string.Empty;
   string oauth_openid = string.Empty;
   string oauth_name = string.Empty;
   string oauth_refresh_token = string.Empty;
   if (Session["oauth_name"] == null || Session["oauth_access_token"] == null ||
    Session["oauth_openid"] == null)
   {
    return "{\"ret\":\"1\", \"msg\":\"   ,Access Token       !\"}";
   }
   oauth_name = Session["oauth_name"].ToString();
   oauth_access_token = Session["oauth_access_token"].ToString();
   oauth_openid = Session["oauth_openid"].ToString();
   oauth_refresh_token = Session["oauth_refresh_token"].ToString();
   if (!weixin_helper.check_access_token(oauth_access_token)) //  access_token        
   {
    Dictionary<string, object> dic1 = weixin_helper.get_refresh_token(oauth_refresh_token);//            access_token
    if (dic1 == null || !dic1.ContainsKey("access_token"))
    {
     return "{\"openid\":\"0\", \"msg\":\"   ,    access_token!\"}";
    }
    oauth_access_token = dic1["access_token"].ToString();
   }
   Dictionary<string, object> dic = weixin_helper.get_user_info(oauth_access_token, oauth_openid);
   if (dic == null)
   {
    return "{\"openid\":\"0\", \"msg\":\"   ,          !\"}";
   }
   try
   {
    StringBuilder str = new StringBuilder();
    str.Append("{");
    str.Append("\"openid\": \"" + dic["openid"].ToString() + "\", ");
    str.Append("\"nickname\": \"" + dic["nickname"].ToString() + "\", ");
    str.Append("\"sex\": \"" + dic["sex"].ToString() + "\", ");
    str.Append("\"province\": \"" + dic["province"].ToString() + "\", ");
    str.Append("\"city\": \"" + dic["city"].ToString() + "\", ");
    str.Append("\"country\": \"" + dic["country"].ToString() + "\", ");
    str.Append("\"headimgurl\": \"" + dic["headimgurl"].ToString() + "\", ");
    str.Append("\"privilege\": \"" + dic["privilege"].ToString() + "\", ");
    str.Append("\"unionid\": \"" + dic["unionid"].ToString() + "\"");
    str.Append("\"oauth_name\": \"" + oauth_name + "\"");
    str.Append("\"oauth_access_token\": \"" + oauth_access_token + "\"");
    str.Append("\"oauth_openid\": \"" + oauth_openid + "\"");
    str.Append("}");
    return str.ToString();
   }
   catch
   {
    return "{\"ret\":\"0\", \"msg\":\"   ,          !\"}";
   }
  }
  #endregion

좋은 웹페이지 즐겨찾기