第一步:登陸公衆號 拿到 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();
類庫結構圖