亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

.NET微信公眾號開發-3.0查詢自定義菜單

2019-11-14 15:55:59
字體:
來源:轉載
供稿:網友

一.前言

   前面我們已經創建好了我們的自定義菜單。那么我們現在要如何查詢我們自定義的菜單。原理都是一樣的,而且都是相當簡單,只是接口地址文檔換掉了。

2.0開始編碼

   同樣我們首先創建好我的查詢頁面,在這里我們使用aspx頁面 selectMenu.aspx

        PRotected void Page_Load(object sender, EventArgs e)        {            var str = GetPage("https://api.weixin.QQ.com/cgi-bin/token?grant_type=client_credential&appid=wxd811f56f3&secret=76eb33f661296");            JObject jo = JObject.Parse(str);            access_token = jo["access_token"].ToString();            GetPage("https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" + access_token + "");            //GetPage("https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=access_token");        }

看代碼是不是相當的簡單。相信這對于聰明的你根本不是什么問題。同樣刪除我們的自定義菜單也很簡單,只不過是接口地址換了而已,GetPage方法的代碼前面的文章已經有了,在這里就不重復的說明了。

3.0令牌優化.

  前面我們已經知道了,怎么獲取我們的access_token,我們知道它的有效時間是7200s,在這里難道我們每次請求都需要去重新獲取一次,豈不是很麻煩,而且也不利于性能的優化,在這里我們對這個獲取令牌的方法做一些優化,更有利于我們的代碼.

在這里我們首先創建一個AccessToken類來存儲我們的一些信息。代碼如下

    /// <summary>    /// 微信許可令牌    /// </summary>    public class AccessToken    {        /// <summary>        /// 保存已獲取到的許可令牌,鍵為公眾號,值為公眾號最后一次獲取到的令牌        /// </summary>        private static ConcurrentDictionary<string, Tuple<AccessToken, DateTime>> accessTokens = new ConcurrentDictionary<string, Tuple<AccessToken, DateTime>>();        /// <summary>        /// 獲取access token的地址        /// </summary>        private const string urlForGettingAccessToken = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";        /// <summary>        /// 獲取access token的http方法        /// </summary>        private const string httpMethodForGettingAccessToken = WebRequestMethods.Http.Get;        /// <summary>        /// 保存access token的最長時間(單位:秒),超過時間之后,需要重新獲取        /// </summary>        private const int accessTokenSavingSeconds = 7000;        /// <summary>        /// access token        /// </summary>        public string access_token { get; set; }        /// <summary>        /// 有效時間,單位:秒        /// </summary>        public int expires_in { get; set; }        /// <summary>        /// 構造函數        /// </summary>        /// <param name="_access_token">access token</param>        /// <param name="_expires_in">有效時間</param>        internal AccessToken(string _access_token, int _expires_in)        {            access_token = _access_token;            expires_in = _expires_in;        }        /// <summary>        /// 返回AccessToken字符串        /// </summary>        /// <returns></returns>        public override string ToString()        {            return string.Format("AccessToken:{0}/r/n有效時間:{1}秒", access_token, expires_in);        }        /// <summary>        /// 從JSON字符串解析AccessToken        /// </summary>        /// <param name="json">JSON字符串</param>        /// <returns>返回AccessToken</returns>        internal static AccessToken ParseFromJson(string json)        {            var at = JsonConvert.DeserializeAnonymousType(json, new { access_token = "", expires_in = 1 });            return new AccessToken(at.access_token, at.expires_in);        }        /// <summary>        /// 嘗試從JSON字符串解析AccessToken        /// </summary>        /// <param name="json">JSON字符串</param>        /// <param name="msg">如果解析成功,返回AccessToken;否則,返回null。</param>        /// <returns>返回是否解析成功</returns>        internal static bool TryParseFromJson(string json, out AccessToken token)        {            bool success = false;            token = null;            try            {                token = ParseFromJson(json);                success = true;            }            catch { }            return success;        }        /// <summary>        /// 得到access token        /// </summary>        /// <param name="userName">公眾號</param>        /// <returns>返回access token</returns>        public static AccessToken Get(string userName)        {            Tuple<AccessToken, DateTime> lastToken = accessTokens.ContainsKey(userName) ? accessTokens[userName] : null;            AccessToken token = lastToken == null ? null : lastToken.Item1;            DateTime refreshTime = lastToken == null ? DateTime.MinValue : lastToken.Item2;            double ms = (DateTime.Now - refreshTime).TotalSeconds;            if (ms > accessTokenSavingSeconds || token == null)            {                //嘗試從微信服務器獲取2次                ErrorMessage msg;                AccessToken newToken = GetFromWeixinServer(userName, out msg);                if (newToken == null)                    newToken = GetFromWeixinServer(userName, out msg);                if (newToken != null)                {                    lastToken = new Tuple<AccessToken, DateTime>(newToken, DateTime.Now);                    accessTokens[userName] = lastToken;                    token = newToken;                }            }            return token;        }        /// <summary>        /// 從微信服務器獲取access token        /// </summary>        /// <param name="userName">公眾號</param>        /// <param name="msg">從服務器返回的錯誤信息。</param>        /// <returns>返回許可令牌;如果獲取失敗,返回null。</returns>        private static AccessToken GetFromWeixinServer(string userName, out ErrorMessage msg)        {            AccessToken token = null;            msg = new ErrorMessage(ErrorMessage.ExceptionCode, "");            string url = string.Format(urlForGettingAccessToken, WxPayConfig.APPID, WxPayConfig.APPSECRET);            string result;            if(!HttpHelper.Request(url, out result, httpMethodForGettingAccessToken, string.Empty))            {                msg.errmsg = "從微信服務器獲取響應失敗。";                return token;            }            if (ErrorMessage.IsErrorMessage(result))                msg = ErrorMessage.Parse(result);            else            {                try                {                    token = AccessToken.ParseFromJson(result);                }                catch (Exception e)                {                    msg = new ErrorMessage(e);                }            }            return token;        }    }

 從這個類中的代碼我們看到,每次獲取access_token的時候都會判斷一些時間是不是超過了7000,我們的token過期時間是7200s,這樣就不需要每次請求的時候都是重新獲取token。

這個時候我們的查詢代碼可以優化下.

        protected void Page_Load(object sender, EventArgs e)        {

              string username = System.Configuration.ConfigurationManager.AppSettings["weixinid"].ToString();
              AccessToken token = AccessToken.Get(username);

            GetPage("https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" + access_token + "");            //GetPage("https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=access_token");        }

 

本人能力有限,希望大家多多包涵.

  

4.0微信公眾號開發系列

1.0初始微信公眾號

2.0創建自定義菜單

3.0查詢自定義菜單

4.0公眾號消息處理

5.0微信支付

6.0模板消息


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线播放日韩av| 亚洲免费小视频| 亚洲a区在线视频| 98午夜经典影视| 亚洲黄色片网站| 亚洲第一网站男人都懂| 欧美午夜精品伦理| 久久理论片午夜琪琪电影网| 在线成人激情视频| 亚洲丝袜av一区| 欧美日韩久久久久| 精品久久久久久电影| 亚洲天堂影视av| 国产一区二中文字幕在线看| 日韩精品免费在线播放| 在线视频中文亚洲| 精品中文字幕在线观看| 丰满岳妇乱一区二区三区| 亚洲国产精品久久久| 色吧影院999| 91精品久久久久久久久青青| 亚洲午夜国产成人av电影男同| 国产精品视频26uuu| 伊人av综合网| 成人伊人精品色xxxx视频| 91精品国产综合久久香蕉| 日韩高清中文字幕| 国产日产久久高清欧美一区| 538国产精品一区二区在线| 国产免费亚洲高清| 91影视免费在线观看| 色av吧综合网| 久久久久久久久久av| 亚洲国产中文字幕久久网| 在线播放日韩精品| 国产成人在线播放| 日韩精品在线观看网站| 国产精品影片在线观看| 91大神福利视频在线| 欧美性色xo影院| 亚洲男人av在线| 国产精品自拍偷拍视频| 国产精品成熟老女人| 欧美激情精品久久久久久变态| 国产精品久久久久久久久免费| 国产91免费看片| 精品国产网站地址| 18久久久久久| 久久九九精品99国产精品| 国产一区视频在线播放| 国产精品极品尤物在线观看| 91视频免费网站| 成人精品一区二区三区| 亚洲自拍小视频免费观看| 欧美日本啪啪无遮挡网站| 欧美日韩成人在线视频| 欧美裸身视频免费观看| 国产成人精品视频在线| xxxx欧美18另类的高清| 韩国v欧美v日本v亚洲| 国产一区二区三区直播精品电影| 欧美激情精品久久久久久蜜臀| 91av成人在线| 欧美性视频网站| 亚洲人成在线观看网站高清| 九九九久久久久久| 日韩精品中文字幕在线观看| 日韩中文视频免费在线观看| 亚洲精品综合久久中文字幕| 亚洲美女在线看| 欧美日韩中文字幕日韩欧美| 久久久久免费视频| 日韩精品视频在线观看网址| 亚洲美女精品成人在线视频| 精品一区二区三区三区| 视频在线一区二区| 美女扒开尿口让男人操亚洲视频网站| 色悠悠国产精品| 欧美亚洲成人网| 国产日韩在线视频| 7777精品久久久久久| 国产精品亚洲网站| 国产精品视频专区| 成人国产精品日本在线| 久久久久久久久中文字幕| 最近更新的2019中文字幕| 国产精品中文久久久久久久| 欧美亚洲另类在线| 国产精品电影网站| 午夜精品久久久久久久久久久久久| 日韩精品极品毛片系列视频| 亚洲伊人一本大道中文字幕| 精品在线欧美视频| 亚洲男人天堂手机在线| 欧美多人乱p欧美4p久久| 国产精品久久久久91| 色噜噜狠狠狠综合曰曰曰88av| 亚洲欧美另类在线观看| 91国内免费在线视频| 一区二区三区美女xx视频| 亚洲女人天堂色在线7777| 日韩av影院在线观看| 国产精品网站视频| 亚洲精品久久久久久久久久久| 国产精品视频男人的天堂| 欧美日韩国内自拍| 亚洲国产日韩欧美在线动漫| 日韩精品在线观看一区二区| 精品久久在线播放| 久久精品国产成人精品| 精品国产精品自拍| 亚洲性线免费观看视频成熟| 欧美精品videossex88| 国产精品美女免费| 国产裸体写真av一区二区| 久久久免费在线观看| 日韩在线中文视频| 国产精品视频导航| 91久久嫩草影院一区二区| 欧美黑人视频一区| 亚洲2020天天堂在线观看| 国产精品十八以下禁看| 欧美诱惑福利视频| 国产精品成av人在线视午夜片| 欧美久久精品午夜青青大伊人| 欧美日韩亚洲91| 亚洲电影成人av99爱色| 亚洲视频网站在线观看| 国产午夜精品一区理论片飘花| 欧美激情一区二区三区高清视频| 欧美另类第一页| 成人在线视频网站| 亚洲精品98久久久久久中文字幕| 自拍偷拍亚洲精品| 青草青草久热精品视频在线观看| 2019中文字幕在线| 欧美美最猛性xxxxxx| 欧美一级视频在线观看| 成人av资源在线播放| 亚洲白虎美女被爆操| 成人精品久久一区二区三区| 亚洲精品98久久久久久中文字幕| 欧美成人免费全部| 日韩av电影在线播放| 国产精品视频播放| 欧美韩国理论所午夜片917电影| 国产精品日韩电影| 国产亚洲精品久久久优势| 日本91av在线播放| 亚洲第一级黄色片| 米奇精品一区二区三区在线观看| 久久青草精品视频免费观看| 亚洲欧美在线第一页| 久久99青青精品免费观看| 国产精品aaaa| 一区二区在线视频播放| 日韩视频永久免费观看| 中文字幕亚洲无线码在线一区| 国产成人97精品免费看片| 奇门遁甲1982国语版免费观看高清| 不卡伊人av在线播放| 国产精品网站入口| 欧美日韩美女在线| 国产日韩精品一区二区|