微信公众平台C#开发系列(四):获取access token凭证
微信公众平台开发 C#如何获取到access token的简单例子
access_token是微信公众号的全局唯一接口调用凭据,公众号开发调用各接口时都需使用access_token。
此篇内容记录了调用access_token接口调用凭据的完整C#例子
官方接口API文档:
https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html#
文档有请求说明返回结果是json格式的结果
///接口正常返回的结果
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200
}
///接口请求错误是返回结果
{
"errcode":40013,
"errmsg":"invalid appid"
}
公共基类:因为所有接口的错误格式是通用的 所以定义一个公共错误实体类 (用于所有接口结果类用来作为基类继承)
namespace YuanTK.WeiXin.Wrapper
{
/// <summary>
/// 接口错误信息 接口基类
/// </summary>
public class ErrorMessage
{
/// <summary>
/// 错误码
/// </summary>
public int errcode { get; set; }
/// <summary>
/// 错误信息
/// </summary>
public string errmsg { get; set; }
}
}
根据这个 AccessToken接口返回的 json字符串,定义AccessTokenResponse类 并继承自 ErrorMessage
namespace YuanTK.WeiXin.Wrapper
{
/// <summary>
/// 凭证接口输出结果
/// </summary>
public class AccessTokenResponse: ErrorMessage
{
/// <summary>
/// 获取到的凭证
/// </summary>
public string access_token { get; set; }
/// <summary>
/// 凭证有效时间,单位:秒
/// </summary>
public string expires_in { get; set; }
}
}
定义一个IWeiXin 泛型接口类 泛型约束ErrorMessage
namespace YuanTK.WeiXin
{
/// <summary>
/// 定义微信通用接口
/// </summary>
/// <typeparam name="T"></typeparam>
public interface IWeiXin<T>where T: ErrorMessage
{
/// <summary>
/// 输出结果
/// </summary>
/// <returns></returns>
T GetResponse();
}
}
创建WeiXinRequest 接口请求公共方法类 泛型约束 ErrorMessage
namespace YuanTK.WeiXin.Common
{
/// <summary>
/// 微信接口请求方法
/// </summary>
public class WeiXinRequest<T> where T : ErrorMessage
{
/// <summary>
/// Get请求
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="url"></param>
/// <returns></returns>
public T Get(string url)
{
HttpWebRequest ApiRequest = (HttpWebRequest)WebRequest.Create(url);
ApiRequest.Method = "GET";//post方式
ApiRequest.Accept = "text/html, application/xhtml+xml, */*";
ApiRequest.ContentType = "application/x-www-form-urlencoded";
HttpWebResponse response = (HttpWebResponse)ApiRequest.GetResponse();
T TResponse = default(T);
using (StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8))
{
string jsonStr = reader.ReadToEnd();
TResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<T>(jsonStr);
}
return TResponse;
}
/// <summary>
/// POST请求
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="url"></param>
/// <param name="poststr"></param>
/// <returns></returns>
public T Post(string url, string poststr)
{
HttpWebRequest ApiRequest = (HttpWebRequest)WebRequest.Create(url);
ApiRequest.Method = "POST";//post方式
ApiRequest.Accept = "text/html, application/xhtml+xml, */*";
ApiRequest.ContentType = "application/x-www-form-urlencoded";
if (!string.IsNullOrEmpty(poststr))
{
byte[] buffer = Encoding.UTF8.GetBytes(poststr);
ApiRequest.ContentLength = buffer.Length;
ApiRequest.GetRequestStream().Write(buffer, 0, buffer.Length);
}
HttpWebResponse response = (HttpWebResponse)ApiRequest.GetResponse();
T TResponse = default(T);
using (StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8))
{
string jsonStr = reader.ReadToEnd();
TResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<T>(jsonStr);
}
return TResponse;
}
}
}
基本的公共类或方法类 准备好了 再定义一个AccessToken类方法继承自 WeiXinRequest 并绑定接口 IWeiXin
namespace YuanTK.WeiXin
{
/// <summary>
/// AccessToken接口
/// </summary>
public class AccessToken : WeiXinRequest<AccessTokenResponse>,IWeiXin<AccessTokenResponse>
{
String api;
public AccessToken(string appid, string secret)
{
api = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}";
}
/// <summary>
/// 调用接口获取结果
/// </summary>
/// <returns></returns>
public AccessTokenResponse GetResponse()
{
return this.Get(api);
}
}
}
微信公众号接口调用access_token凭据使用例子
//微信公众号平台分配的appid
string appid = "wx*3dc7*************";
//微信公众号平台分配的appid
string secret = "***bca72d5bbb***********";
//初始化接口方法
IWeiXin<AccessTokenResponse> api = new AccessToken(appid, secret);
//调用接口并输出结果
AccessTokenResponse token = api.GetResponse();
获取成功效果图