Maison Applet WeChat Développement WeChat Développement WeChat - Solution d'expiration du jeton d'accès

Développement WeChat - Solution d'expiration du jeton d'accès

May 15, 2018 pm 02:16 PM
微信开发

Développement WeChat-Solution d'expiration du TOKEN D'ACCÈS

Cause : En raison de l'importance du access_token, tous ceux qui ont développé WeChat le connaissent, mais il a son propre cycle de vie. L'explication officielle est : « La période de validité. est de 7 200 secondes", appelé 2 000 fois par jour. Une fois le trafic intense, ce sera fini. Si frère Long ne nous aide pas à résoudre le problème, nous devons le résoudre nous-mêmes. Nous avons hâte de mourir.

La solution est simple : créez des données de jeton d'accès public et ne recréez pas le access_token pendant la période de validité.

Solution :
1. Bibliothèque de classes WeChat : lisez directement les données json dans le fichier de données du jeton d'accès pendant la période de validité, ré-obtenez et créez un nouvel accès. données de jeton. Fichier
2. Fichier de données : stocke les données de jeton d'accès valides, en particulier : access_token.json et jsapi_ticket.json

Le code de base est le suivant :

Index: wxjsSDK.cs
===================================================================
--- wxjsSDK.cs	(revision 0)
+++ wxjsSDK.cs	(revision 1)
@@ -0,0 +1,209 @@
+using System;
+using System.Collections.Generic;
+using System.Web;
+using System.IO;
+using System.Security.Cryptography;
+using System.Runtime.Serialization.Json;
+using System.Runtime.Serialization;
+using System.Net;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Text; 
+
+namespace JR.Common
+{
+    public class wxjsSDK
+    {
+        private string appId; 
+        private string appSecret;
+
+
+        public wxjsSDK(string appId, string appSecret) 
+        { 
+            this.appId = appId; 
+            this.appSecret = appSecret; 
+        } 
+   
+   
+   
+        //得到数据包,返回使用页面 
+        public System.Collections.Hashtable getSignPackage() 
+        { 
+            string jsapiTicket = getJsApiTicket(); 
+            string url = HttpContext.Current.Request.Url.ToString(); //"http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; 
+            string timestamp = Convert.ToString(ConvertDateTimeInt(DateTime.Now)); 
+            string nonceStr = createNonceStr(); 
+            // 这里参数的顺序要按照 key 值 ASCII 码升序排序 
+            string rawstring = "jsapi_ticket=" + jsapiTicket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + url + ""; 
+            string signature = SHA1_Hash(rawstring); 
+            var signPackage = new System.Collections.Hashtable(); 
+            signPackage.Add("appId", appId); 
+            signPackage.Add("nonceStr", nonceStr); 
+            signPackage.Add("timestamp", timestamp); 
+            signPackage.Add("url", url); 
+            signPackage.Add("signature", signature); 
+            signPackage.Add("rawString", rawstring); 
+            return signPackage; 
+        } 
+   
+   
+        //创建随机字符串 
+        private string createNonceStr()
+        {
+            int length = 16;
+            string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+            string str = "";
+            var rad = new Random();
+            for (int i = 0; i < length; i++)
+            {
+                str += chars.Substring(rad.Next(0, chars.Length - 1), 1);
+            }
+            return str;
+        }
+
+
+        //得到ticket 如果文件里时间 超时则重新获取 
+        private string getJsApiTicket()
+        {
+            string ticket = "";
+            // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例 
+            string path = HttpContext.Current.Server.MapPath(@"/log/jssdk/jsapi_ticket.json");
+            if (!File.Exists(path))
+            {
+                File.Create(path).Close();
+            }
+            StreamReader sr = new StreamReader(path, System.Text.Encoding.Default);
+            string filecontent = sr.ReadToEnd();
+            CommonJsonModel jsonModel = null;
+            if (!string.IsNullOrEmpty(filecontent))
+            {
+                jsonModel = new CommonJsonModel(filecontent);
+            }
+            sr.Close();
+            sr.Dispose();
+            if (jsonModel == null || int.Parse(jsonModel.GetValue("expires_in")) < ConvertDateTimeInt(DateTime.Now))
+            {
+                string accessToken = getAccessToken();
+                string url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=" + accessToken;
+                jsonModel = new CommonJsonModel(httpGet(url));
+                ticket = jsonModel.GetValue("ticket");
+                if (ticket != "")
+                {
+                    string json = "{\"ticket\":\"" + ticket + "\",\"expires_in\":" + (ConvertDateTimeInt(DateTime.Now) + 7000) + "}";
+                    StreamWriterMetod(json, path);
+                }
+            }
+            else
+            {
+                ticket = jsonModel.GetValue("ticket");
+            }
+            return ticket;
+        }
+
+
+        //得到accesstoken 如果文件里时间 超时则重新获取 
+        private string getAccessToken()
+        {
+            // access_token 应该全局存储与更新,以下代码以写入到文件中做示例 
+            string access_token = "";
+            string path = HttpContext.Current.Server.MapPath(@"/log/jssdk/access_token.json");
+            if (!File.Exists(path))
+            {
+                File.Create(path).Close();
+            }
+            StreamReader sr = new StreamReader(path, System.Text.Encoding.Default);
+            string filecontent = sr.ReadToEnd();
+            CommonJsonModel jsonModel = null;
+            if (!string.IsNullOrEmpty(filecontent))
+            {
+                jsonModel = new CommonJsonModel(filecontent);
+            }
+            sr.Close();
+            sr.Dispose();
+            if (jsonModel == null || int.Parse(jsonModel.GetValue("expires_in")) < ConvertDateTimeInt(DateTime.Now))
+            {
+                string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId +
+                             "&secret=" + appSecret + "";
+                jsonModel = new CommonJsonModel(httpGet(url));
+                access_token = jsonModel.GetValue("access_token");
+                if (access_token != "")
+                {
+                    string json = "{\"access_token\":\"" + access_token + "\",\"expires_in\":" + (ConvertDateTimeInt(DateTime.Now) + 7000) + "}";
+                    StreamWriterMetod(json, path);
+                }
+            }
+            else
+            {
+                access_token = jsonModel.GetValue("access_token");
+            }
+            return access_token;
+        }
+
+
+        //发起一个http请球,返回值 
+        private string httpGet(string url) 
+        {
+            try
+            {
+                var MyWebClient = new WebClient();
+                MyWebClient.Credentials = CredentialCache.DefaultCredentials; //获取或设置用于向Internet资源的请求进行身份验证的网络凭据 
+                Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据 
+                string pageHtml = System.Text.Encoding.Default.GetString(pageData);//如果获取网站页面采用的是GB2312,则使用这句             
+                //string pageHtml = Encoding.UTF8.GetString(pageData); //如果获取网站页面采用的是UTF-8,则使用这句 
+                return pageHtml;
+            }
+            catch (WebException webEx)
+            {
+                Console.WriteLine(webEx.Message.ToString());
+                return null;
+            }
+        } 
+   
+   
+        //SHA1哈希加密算法 
+        private string SHA1_Hash(string str_sha1_in) 
+        { 
+            SHA1 sha1 = new SHA1CryptoServiceProvider(); 
+            byte[] bytes_sha1_in = System.Text.UTF8Encoding.Default.GetBytes(str_sha1_in); 
+            byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in); 
+            string str_sha1_out = BitConverter.ToString(bytes_sha1_out); 
+            str_sha1_out = str_sha1_out.Replace("-", "").ToLower(); 
+            return str_sha1_out; 
+        } 
+   
+   
+        /// <summary> 
+        /// StreamWriter写入文件方法 
+        /// </summary> 
+        private void StreamWriterMetod(string str, string patch) 
+        {
+            FileStream stream = new FileStream(patch, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite);
+            StreamWriter writer = new StreamWriter(stream);
+            writer.WriteLine(str);
+            stream.Flush();
+            writer.Close();
+            stream.Close();
+            stream.Dispose();
+            writer.Dispose();
+        } 
+  
+   
+   
+   
+        /// <summary> 
+        /// 将c# DateTime时间格式转换为Unix时间戳格式 
+        /// </summary> 
+        /// <param name="time">时间</param> 
+        /// <returns>double</returns> 
+        private int ConvertDateTimeInt(System.DateTime time) 
+        { 
+            int intResult = 0; 
+            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); 
+            intResult = Convert.ToInt32((time - startTime).TotalSeconds); 
+            return intResult; 
+        } 
+
+
+    }
+
+
+}
 
 
access_token.json
{"access_token":"4H14BVCUrAxxxxxxxxxxxxWeLu-zKETaBYqsoKFjsHZDc3xOwc-m43WDw2HjzxEkng2nC7iJuHydNt5PqRDY7HCoAU4lmuaPoYsIQHdW9kA","expire_time":1428599121}

access_token.json
{"jsapi_ticket":"bxLdikRXVbTPdHSM05e5u1wgoccccccccccccccccccccccccccccc11FFzYsiqbXZN0SDGN6Dnksnt2Q","expire_time":1428599122}
Copier après la connexion

Plus Développement WeChat - Solution d'expiration du jeton d'accès Pour les articles connexes, veuillez faire attention au site Web PHP chinois !

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Développement PHP WeChat : Comment implémenter le cryptage et le décryptage des messages Développement PHP WeChat : Comment implémenter le cryptage et le décryptage des messages May 13, 2023 am 11:40 AM

PHP est un langage de script open source largement utilisé dans le développement Web et la programmation côté serveur, notamment dans le développement de WeChat. Aujourd'hui, de plus en plus d'entreprises et de développeurs commencent à utiliser PHP pour le développement de WeChat, car il est devenu un langage de développement vraiment facile à apprendre et à utiliser. Dans le développement de WeChat, le cryptage et le décryptage des messages sont une question très importante car ils impliquent la sécurité des données. Pour les messages sans méthodes de cryptage et de décryptage, les pirates peuvent facilement obtenir les données, ce qui constitue une menace pour les utilisateurs.

Utiliser PHP pour développer des outils de messagerie de masse WeChat Utiliser PHP pour développer des outils de messagerie de masse WeChat May 13, 2023 pm 05:00 PM

Avec la popularité de WeChat, de plus en plus d’entreprises commencent à l’utiliser comme outil marketing. La fonction de messagerie de groupe WeChat est l'un des moyens importants permettant aux entreprises de mener du marketing WeChat. Cependant, si vous comptez uniquement sur l’envoi manuel, il s’agit d’une tâche extrêmement longue et laborieuse pour les spécialistes du marketing. Il est donc particulièrement important de développer un outil de messagerie de masse WeChat. Cet article présentera comment utiliser PHP pour développer des outils d'envoi de masse WeChat. 1. Travail de préparation Pour développer les outils d'envoi de masse WeChat, nous devons maîtriser les points techniques suivants : Connaissance de base du développement de la plateforme publique PHP WeChat Outils de développement : Sub

Développement PHP WeChat : Comment implémenter la gestion des balises utilisateur Développement PHP WeChat : Comment implémenter la gestion des balises utilisateur May 13, 2023 pm 04:31 PM

Dans le développement des comptes publics WeChat, la gestion des balises utilisateur est une fonction très importante, qui permet aux développeurs de mieux comprendre et gérer leurs utilisateurs. Cet article explique comment utiliser PHP pour implémenter la fonction de gestion des balises utilisateur WeChat. 1. Obtenez l'openid de l'utilisateur WeChat Avant d'utiliser la fonction de gestion des balises utilisateur WeChat, nous devons d'abord obtenir l'openid de l'utilisateur. Dans le développement des comptes publics WeChat, il est courant d'obtenir l'openid via l'autorisation de l'utilisateur. Une fois l'autorisation de l'utilisateur terminée, nous pouvons obtenir l'utilisateur via le code suivant

Développement PHP WeChat : Comment implémenter des enregistrements d'envoi de messages de groupe Développement PHP WeChat : Comment implémenter des enregistrements d'envoi de messages de groupe May 13, 2023 pm 04:31 PM

Alors que WeChat devient un outil de communication de plus en plus important dans la vie des gens, sa fonction de messagerie agile est rapidement privilégiée par un grand nombre d'entreprises et de particuliers. Pour les entreprises, développer WeChat en une plate-forme marketing est devenu une tendance, et l'importance du développement de WeChat est progressivement devenue plus importante. Parmi eux, la fonction d'envoi de groupe est encore plus largement utilisée. Alors, en tant que programmeur PHP, comment implémenter des enregistrements d'envoi de messages de groupe ? Ce qui suit vous donnera une brève introduction. 1. Comprendre les connaissances en développement liées aux comptes publics WeChat. Avant de comprendre comment mettre en œuvre des enregistrements d'envoi de messages de groupe, je

Développement PHP WeChat : Comment implémenter la gestion des fenêtres de discussion du service client Développement PHP WeChat : Comment implémenter la gestion des fenêtres de discussion du service client May 13, 2023 pm 05:51 PM

WeChat est actuellement l'une des plateformes sociales comptant la plus grande base d'utilisateurs au monde. Avec la popularité de l'Internet mobile, de plus en plus d'entreprises commencent à prendre conscience de l'importance du marketing WeChat. Lors du marketing WeChat, le service client est un élément crucial. Afin de mieux gérer la fenêtre de discussion du service client, nous pouvons utiliser le langage PHP pour le développement de WeChat. 1. Introduction au développement PHP WeChat PHP est un langage de script open source côté serveur largement utilisé dans le domaine du développement Web. En combinaison avec l'interface de développement fournie par la plateforme publique WeChat, nous pouvons utiliser le langage PHP pour mener WeChat

Développement PHP WeChat : Comment implémenter la fonction de vote Développement PHP WeChat : Comment implémenter la fonction de vote May 14, 2023 am 11:21 AM

Dans le développement des comptes publics WeChat, la fonction de vote est souvent utilisée. La fonction de vote est un excellent moyen pour les utilisateurs de participer rapidement aux interactions, et c'est également un outil important pour organiser des événements et recueillir des opinions. Cet article vous présentera comment utiliser PHP pour implémenter la fonction de vote WeChat. Obtenez l'autorisation du compte officiel WeChat. Tout d'abord, vous devez obtenir l'autorisation du compte officiel WeChat. Sur la plateforme publique WeChat, vous devez configurer l'adresse API du compte public WeChat, le compte officiel et le token correspondant au compte public. Dans le processus de développement en langage PHP, nous devons utiliser le PH officiellement fourni par WeChat

Comment utiliser PHP pour le développement WeChat ? Comment utiliser PHP pour le développement WeChat ? May 21, 2023 am 08:37 AM

Avec le développement d’Internet et des appareils mobiles intelligents, WeChat est devenu un élément indispensable dans les domaines social et marketing. Dans cette ère de plus en plus numérique, la manière d'utiliser PHP pour le développement de WeChat est devenue la préoccupation de nombreux développeurs. Cet article présente principalement les points de connaissances pertinents sur la façon d'utiliser PHP pour le développement WeChat, ainsi que certains conseils et précautions. 1. Préparation de l'environnement de développement Avant de développer WeChat, vous devez d'abord préparer l'environnement de développement correspondant. Plus précisément, vous devez installer l'environnement d'exploitation PHP et la plateforme publique WeChat

Développement PHP WeChat : Comment implémenter la reconnaissance vocale Développement PHP WeChat : Comment implémenter la reconnaissance vocale May 13, 2023 pm 09:31 PM

Avec la popularité de l'Internet mobile, de plus en plus de personnes utilisent WeChat comme logiciel social, et la plateforme ouverte WeChat a également apporté de nombreuses opportunités aux développeurs. Ces dernières années, avec le développement de la technologie de l’intelligence artificielle, la technologie de reconnaissance vocale est progressivement devenue l’une des technologies les plus populaires dans le développement de terminaux mobiles. Dans le développement de WeChat, la manière de mettre en œuvre la reconnaissance vocale est devenue une préoccupation pour de nombreux développeurs. Cet article expliquera comment utiliser PHP pour développer des applications WeChat afin d'implémenter des fonctions de reconnaissance vocale. 1. Principes de la reconnaissance vocale Avant de présenter comment mettre en œuvre la reconnaissance vocale, comprenons d'abord le langage

See all articles