微信公衆號開發——獲取access_token

第一步:登陸公衆號 拿到 AppID(應用ID) 和 AppSecret(應用密鑰)

這裏寫圖片描述


第二步:公衆號 接口權限 查看 對話服務>基礎支持>獲取access_token

這裏寫圖片描述


上代碼

寫了3個類
BasisSupport 基礎支持
CacheHelper 緩存幫助
Sender 發起請求


BasisSupport

using Codeplex.Data;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WeiXinPublic.utils;

namespace WeiXinPublic.dialog_service
{
    /// <summary>
    /// 基礎支持
    /// 1.獲取access_token
    /// 2.獲取微信服務器IP地址
    /// </summary>
    public class BasisSupport
    {
        #region 獲取access_token
        /// <summary>
        /// 獲取access_token json字符串 調用微信接口
        /// </summary>
        /// <returns></returns>
        /// <param name="appid"></param>
        /// <param name="secret"></param>
        /// <returns></returns>
        private static string get_accesstoken(string appid, string secret)
        {
            string res = string.Empty;
            object obj = CacheHelper.GetCache("access_token");
            if (obj != null)
            {
                res = obj.ToString();
            }
            else
            {
                string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret;
                //通過接口去取
                res = Sender.Get(url);
                CacheHelper.AddCache("access_token", res, DateTime.Now.AddMinutes(120));   //ccess_token的有效期目前爲2個小時  
            }
            return res;
        }

        /// <summary>
        /// 獲取access_token
        /// </summary>
        /// <param name="appid"></param>
        /// <param name="secret"></param>
        /// <returns></returns>
        public static Hashtable GetAccessToken(string appid, string secret)
        {
            string res = get_accesstoken(appid, secret);
            var json = DynamicJson.Parse(res);
            var access_token = json.access_token;
            var expires_in = json.expires_in;

            //萬能字典
            Hashtable ht = new Hashtable();
            ht.Add("access_token", access_token);
            ht.Add("expires_in", expires_in);
            return ht;
        } 
        #endregion    
    }
}

CacheHelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace WeiXinPublic.utils
{
    public class CacheHelper
    {
        public static List<string> AllUseCacheKey = new List<string>();

        /// <summary>
        /// 添加緩存
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="absoluteExpiration"></param>
        public static void AddCache(string key, object value, DateTime absoluteExpiration)
        {
            if (!AllUseCacheKey.Contains(key))
            {
                AllUseCacheKey.Add(key);
            }
            HttpContext.Current.Cache.Add(key, value, null, absoluteExpiration, TimeSpan.Zero, System.Web.Caching.CacheItemPriority.Normal, null);
        }

        /// <summary>
        /// 添加緩存
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        public static void AddCache(string key, object value)
        {
            if (!AllUseCacheKey.Contains(key))
            {
                AllUseCacheKey.Add(key);
            }

            System.Web.Caching.Cache cache = HttpRuntime.Cache;
            cache.Insert(key, value);
        }

        /// <summary>
        /// 從緩存中取數據
        /// </summary>
        /// <param name="key"> key</param>
        /// <returns></returns>
        public static object GetCache(string key)
        {
            if (AllUseCacheKey.Contains(key) && HttpRuntime.Cache[key] != null)
            {
                return HttpRuntime.Cache[key];
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 移除緩存
        /// </summary>
        /// <param name="key"></param>
        public static void RemoveCache(string key)
        {
            if (AllUseCacheKey.Contains(key))
            {
                AllUseCacheKey.Remove(key);
            }
            HttpContext.Current.Cache.Remove(key);
        }

        /// <summary>
        /// 清空使用的緩存
        /// </summary>
        public static void ClearCache()
        {
            foreach (string value in AllUseCacheKey)
            {
                HttpContext.Current.Cache.Remove(value);
            }
            AllUseCacheKey.Clear();
        }
    }
}

Sender

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace WeiXinPublic.utils
{
    public class Sender
    {
        /// <summary>
        /// Get方式 訪問微信接口
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string Get(string url)
        {
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
            myRequest.Method = "GET";
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
            using (StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }

        /// <summary>
        /// Post方式 訪問微信接口
        /// </summary>
        /// <param name="url"></param>
        /// <param name="postData"></param>
        /// <returns></returns>
        public static string Post(string url, string postData)
        {
            Stream outstream = null;
            Stream instream = null;
            StreamReader sr = null;
            HttpWebResponse response = null;
            HttpWebRequest request = null;
            Encoding encoding = Encoding.UTF8;
            byte[] data = encoding.GetBytes(postData);
            // 準備請求...
            try
            {
                // 設置參數
                request = WebRequest.Create(url) as HttpWebRequest;
                CookieContainer cookieContainer = new CookieContainer();
                request.CookieContainer = cookieContainer;
                request.AllowAutoRedirect = true;
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = data.Length;
                outstream = request.GetRequestStream();
                outstream.Write(data, 0, data.Length);
                outstream.Close();
                //發送請求並獲取相應迴應數據
                response = request.GetResponse() as HttpWebResponse;
                //直到request.GetResponse()程序纔開始向目標網頁發送Post請求
                instream = response.GetResponseStream();
                sr = new StreamReader(instream, encoding);
                //返回結果網頁(html)代碼
                string content = sr.ReadToEnd();
                string err = string.Empty;
                return content;
            }
            catch (Exception ex)
            {
                string err = ex.Message;
                return string.Empty;
            }
        }
    }
}

外部調用

Hashtable ht_access_token = BasisSupport.GetAccessToken(appid, secret);
string access_token = ht_access_token["access_token"].ToString();

類庫結構圖

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章