C\#위 챗 공식 플랫폼 개발 의 accesstoken 가 져 오기 저장 및 업데이트

1.access 가 무엇 인지token?
    access_token 은 공중전화 의 전체 국면 에서 유일한 어음 으로 공중전화 가 각 인 터 페 이 스 를 호출 할 때 access 를 사용 해 야 합 니 다.token。정상 상황 에서 accesstoken 유효기간 7200 초,중복 획득 은 지난번 획득 한 accesstoken 실효.획득 으로 accesstoken 의 api 호출 횟수 가 매우 제한 되 어 있 습 니 다.개발 자 전역 저장 및 업데이트 accesstoken,자주 새로 고침 accesstoken 은 api 호출 이 제한 되 어 자신의 업무 에 영향 을 줄 수 있 습 니 다.
2.해결 해 야 할 문제
1、access 획득 방법token。
2、access 때문에token 의 유효기간 은 7200 초,즉 2 시간 이 며,중복 획득 은 지난번 에 획득 한 access 를 가 져 옵 니 다.token 실효,access 획득token 의 api 호출 횟수 가 매우 제한 되 어 있 기 때문에 전체 저장 및 업데이트 access 를 해결 해 야 합 니 다.token。
사고
1、accesstoken 은 데이터베이스 에 저 장 됩 니 다.
2,access 언제 업데이트토 큰 은 요?accesstoken 이 효력 을 잃 었 을 때 업데이트 합 니 다.access 를 어떻게 판단 합 니까?token 은 효력 을 잃 었 습 니까?현재 access 사용token 은 위 챗 인 터 페 이 스 를 요청 하여 사용자 정의 메뉴 를 가 져 옵 니 다.돌아 오 는 errcode 가 42001 이면 access 를 설명 합 니 다.token 이 이미 효력 을 잃 었 습 니 다.이 때 access 를 다시 가 져 옵 니 다.token。
데이터베이스 디자인(표 명 SWXConfig):

4.코드:
1.Http 요청 코드(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.UTF8);
 //      (html)  
 string content = sr.ReadToEnd();
 return content;
}
#endregion
2.보조 방법(Tools 클래스):

namespace SWX.Utils
{
 /// <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

 }
}
3,판단 accesstoken 만 료 여부(WXApi 클래스):

#region   Token    
/// <summary>
///   Token    
/// </summary>
public static bool TokenExpired(string access_token)
{
 string jsonStr = HttpRequestUtil.RequestUrl(string.Format("https://api.weixin.qq.com/cgi-bin/menu/get?access_token={0}", access_token));
 if (Tools.GetJsonValue(jsonStr, "errcode") == "42001")
 {
  return true;
 }
 return false;
}
#endregion
4,위 챗 인터페이스 요청,access 획득token(WXApi 클래스):

#region   Token
/// <summary>
///   Token
/// </summary>
public static string GetToken(string appid, string secret)
{
 string strJson = HttpRequestUtil.RequestUrl(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, secret));
 return Tools.GetJsonValue(strJson, "access_token");
}
#endregion
5.전역 저장 및 업데이트 accesstoken(AdminUtil 클래스):

#region   access_token
/// <summary>
///   access_token
/// </summary>
public static string GetAccessToken(PageBase page)
{
 string access_token = string.Empty;

 UserInfo user = GetLoginUser(page);
 if (user != null)
 {
  if (string.IsNullOrWhiteSpace(user.access_token)) //     access_token
  {
   access_token = WXApi.GetToken(user.AppID, user.AppSecret);
  }
  else
  {
   if (WXApi.TokenExpired(user.access_token)) //access_token  
   {
    access_token = WXApi.GetToken(user.AppID, user.AppSecret);
   }
   else
   {
    return user.access_token;
   }
  }

  MSSQLHelper.ExecuteSql(string.Format("update SWX_Config set access_token='{0}' where UserName='{1}'", access_token, user.UserName));
 }

 return access_token;
}
#endregion
멋 진 주제 공유:ASP.NET 위 챗 개발 튜 토리 얼 집계여러분 의 공 부 를 환영 합 니 다.
이상 은 본 고의 모든 내용 이 므 로 여러분 에 게 위 챗 공공 플랫폼 개발 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기