中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信開發-ACCESS TOKEN過期失效怎么辦

發布時間:2021-01-19 15:05:14 來源:億速云 閱讀:330 作者:小新 欄目:移動開發

這篇文章主要介紹微信開發-ACCESS TOKEN過期失效怎么辦,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

微信開發-ACCESS TOKEN 過期失效解決方案

起因:因為access_token的重要性,開發過微信的都知道,但是他有自己的生命周期,官方解釋為:"有效期為7200秒",一天調用2000次。流量一高,就over了,沒辦法,龍哥不幫我們解決問題,我們就要自己解決,不能等死。

解決思路很簡單:建立公共access token數據,有效期內不重新創建access_token。

解決方案:
1、微信類庫:有效期內直接讀取access token數據文件中的json數據,過期失效,重新獲取并創建新的access token數據文件
2、數據文件:存放有效的access token數據,具體有:access_token.json和jsapi_ticket.json

核心代碼如下:

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}

以上是“微信開發-ACCESS TOKEN過期失效怎么辦”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丰镇市| 锦屏县| 兴安盟| 竹北市| 西和县| 保德县| 辛集市| 尚义县| 介休市| 泗洪县| 十堰市| 临汾市| 凭祥市| 平湖市| 大厂| 赤壁市| 古田县| 轮台县| 利川市| 农安县| 新密市| 浪卡子县| 洛宁县| 平乡县| 九江县| 宜川县| 固安县| 扎赉特旗| 灵宝市| 日喀则市| 新营市| 裕民县| 碌曲县| 霸州市| 古蔺县| 新安县| 双峰县| 留坝县| 平凉市| 东阿县| 思南县|