Heim  >  Artikel  >  WeChat-Applet  >  So lösen Sie das Access_token-Ablaufproblem in der .Net WeChat-Entwicklung

So lösen Sie das Access_token-Ablaufproblem in der .Net WeChat-Entwicklung

高洛峰
高洛峰Original
2017-03-28 14:43:032558Durchsuche

In diesem Artikel wird hauptsächlich detailliert beschrieben, wie das Access_token-Ablaufproblem in der .Net WeChat-Entwicklung gelöst werden kann.

Da access_token in zukünftigen erweiterten Funktionen enthalten sein wird, wird es häufig verwendet Ich muss das zuvor hier erläuterte access_token ändern.
Darüber hinaus ist zu beachten, dass sich das access_token ändert und einen eigenen Zyklus hat. Die offizielle Erklärung lautet: „Die Gültigkeitsdauer beträgt 7200 Sekunden“, was erfordert, dass wir das erhaltene access_token in einer physischen Datei oder Anwendung speichern und anfordern Ändern Sie diese Inhalte nach Ablauf und lesen Sie sie bei Bedarf vor.
Einige Leute haben möglicherweise gedacht, dass ich nur eine erhalten kann. Der gleiche Effekt kann ohne physische Dateien und Anwendungen erzielt werden, aber Sie müssen darauf achten Die Anzahl der pro Tag erhaltenen Access_Tokens ist ebenfalls begrenzt. Wenn es viele Benutzer gibt, wird sie definitiv überschritten. Wir implementieren diese Funktionen also immer noch gemäß den oben genannten Ideen: Zuvor haben wir die Methode zum Erhalten von access_token (Verbindung) bereits verstanden, jetzt müssen wir nur noch sicherstellen, dass sie jederzeit aktualisiert wird
Erstellen Sie zunächst eine Access_token-Klasse


/// <summary>
///Access_token 的摘要说明
/// </summary>
public class Access_token
{
 public Access_token()
 {
 //
 //TODO: 在此处添加构造函数逻辑
 //
 }
 string _access_token;
 string _expires_in;

 /// <summary>
 /// 获取到的凭证 
 /// </summary>
 public string access_token
 {
  get { return _access_token; }
  set { _access_token = value; }
 }

 /// <summary>
 /// 凭证有效时间,单位:秒
 /// </summary>
 public string expires_in
 {
  get { return _expires_in; }
  set { _expires_in = value; }
 }
}

Verwenden Sie die folgende XML-Datei, um access_token zu speichern, erstellen Sie eine XMLFile.xml und schreiben Sie den Inhalt des Access_YouXRQ-Tags als vergangene Zeit, damit Wir können am Anfang beginnen. Beim Aufruf wird festgestellt, dass es abgelaufen ist, und dann wird ein neues access_token abgerufen.


<?xml version="1.0" encoding="utf-8"?>
<xml>
 <Access_Token>初始值可以随便写</Access_Token>
 <Access_YouXRQ>1980/12/12 16:06:38</Access_YouXRQ>
</xml>

Ändern Sie die vorherige Methode zum Erhalten von Access_token und lassen Sie sie der Access_token-Instanz einen Wert zuweisen


public static Access_token GetAccess_token()
 {
  string appid = 你的appid ;
  string secret = 你的secret;
  string strUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret;
  Access_token mode = new Access_token();

  HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(strUrl);

  req.Method = "GET";
  using (WebResponse wr = req.GetResponse())
  {
   HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse();

   StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);

   string content = reader.ReadToEnd();
   //Response.Write(content);
   //在这里对Access_token 赋值
   Access_token token = new Access_token();
   token = JsonHelper.ParseFromJson<Access_token>(content);
   mode.access_token = token.access_token;
   mode.expires_in = token.expires_in;
  }
  return mode;
 }

Die obige Methode verwendet die Verarbeitung von Json-Objekten, daher habe ich den Code von JsonHelper als Referenz veröffentlicht. Hier ist der Code von JsonHelper.cs:


using System;
using System.IO;
using System.Text;
using System.Runtime.Serialization.Json;
 

public class JsonHelper
{
 /// <summary>
 /// 生成Json格式
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="obj"></param>
 /// <returns></returns>
 public static string GetJson<T>(T obj)
 {
  DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
  using (MemoryStream stream = new MemoryStream())
  {
   json.WriteObject(stream, obj);
   string szJson = Encoding.UTF8.GetString(stream.ToArray()); return szJson;
  }
 }
 /// <summary>
 /// 获取Json的Model
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="szJson"></param>
 /// <returns></returns>
 public static T ParseFromJson<T>(string szJson)
 {
  T obj = Activator.CreateInstance<T>();
  using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
  {
   DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
   return (T)serializer.ReadObject(ms);
  }
 }
}

Wir benötigen außerdem eine Möglichkeit, festzustellen, ob das access_token abgelaufen ist, und die XML-Datei zu aktualisieren, wenn sie abläuft.


/// <summary>
 /// 根据当前日期 判断Access_Token 是否超期 如果超期返回新的Access_Token 否则返回之前的Access_Token
 /// </summary>
 /// <param name="datetime"></param>
 /// <returns></returns>
 public static string IsExistAccess_Token()
 {

  string Token = string.Empty;
  DateTime YouXRQ;
  // 读取XML文件中的数据,并显示出来 ,注意文件路径
  string filepath = Server.MapPath("XMLFile.xml");

  StreamReader str = new StreamReader(filepath, System.Text.Encoding.UTF8);
  XmlDocument xml = new XmlDocument();
  xml.Load(str);
  str.Close();
  str.Dispose();
  Token = xml.SelectSingleNode("xml").SelectSingleNode("Access_Token").InnerText;
  YouXRQ = Convert.ToDateTime(xml.SelectSingleNode("xml").SelectSingleNode("Access_YouXRQ").InnerText);

  if (DateTime.Now > YouXRQ)
  {
   DateTime _youxrq = DateTime.Now;
   Access_token mode = GetAccess_token();
   xml.SelectSingleNode("xml").SelectSingleNode("Access_Token").InnerText = mode.access_token;
   _youxrq = _youxrq.AddSeconds(int.Parse(mode.expires_in));
   xml.SelectSingleNode("xml").SelectSingleNode("Access_YouXRQ").InnerText = _youxrq.ToString();
   xml.Save(filepath);
   Token = mode.access_token;
  }
  return Token;
 }

Okay, nachdem ich die oben genannten Arbeiten abgeschlossen habe, muss ich bei Verwendung von access_token nur Folgendes aufrufen, und es ist in Ordnung: „Kunden brauchen nicht mehr.“ sich Sorgen über den Ablauf des Tokens machen“
string _access_token = IsExistAccess_Token();

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Access_token-Ablaufproblem in der .Net WeChat-Entwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn