1. access_token이란 무엇인가요?
access_token은 공용 계정의 전역 고유 티켓입니다. 공용 계정은 각 인터페이스를 호출할 때 access_token을 사용해야 합니다. 일반적인 상황에서 access_token은 7200초 동안 유효합니다. 획득을 반복하면 마지막 access_token이 무효화됩니다. access_token을 얻기 위한 API 호출 횟수는 매우 제한되어 있으므로 개발자는 access_token을 전역적으로 저장하고 업데이트하는 것이 좋습니다. access_token을 자주 새로 고치면 API 호출이 제한되고 자체 비즈니스에 영향을 미칩니다.
2. 해결해야 할 문제
1. access_token을 얻는 방법.
2. access_token의 유효기간은 7200초, 즉 2시간이며, 반복적으로 취득하면 마지막 access_token이 무효화되므로 access_token을 취득하기 위한 api 호출 횟수가 매우 제한되어 있습니다. access_token 을 전역적으로 저장하고 업데이트하는 방법을 해결하는 데 필요합니다.
3. 아이디어
1. access_token을 데이터베이스에 저장합니다.
2. access_token은 언제 업데이트되나요? access_token이 만료되면 업데이트하세요. 그렇다면 access_token이 만료되었는지 어떻게 확인할 수 있나요? 현재 access_token을 사용하여 WeChat 인터페이스를 요청하여 사용자 정의 메뉴를 얻으십시오. 반환된 errcode가 42001이면 access_token이 만료되었음을 의미합니다.
데이터베이스 설계(테이블 이름 SWX_Config):
4. 코드:
1. Http 요청 코드(HttpRequestUtil 클래스):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #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;
Stream responseStream = response.GetResponseStream();
StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
string content = sr.ReadToEnd();
return content;
}
#endregion
|
로그인 후 복사
2. 보조 메서드(Tools 클래스):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 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. access_token이 만료되었는지 확인(WXApi 클래스):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #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 클래스):
1 2 3 4 5 6 7 8 9 10 | #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. 전역 저장 및 업데이트 access_token(AdminUtil 클래스):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #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 = WXApi.GetToken(user.AppID, user.AppSecret);
}
else
{
if (WXApi.TokenExpired(user.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
|
로그인 후 복사
위 내용이 모두에게 도움이 되기를 바랍니다. WeChat 공개 플랫폼 개발에 참여하고 있습니다.
C# WeChat 공개 플랫폼 개발에서 access_token 획득, 저장, 업데이트와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!