using System; namespace WeixinApi { /// /// 微信公众号信息 /// public class WeixinAccount { public delegate void AccessTokenCallback(WeixinAccount account); public event AccessTokenCallback TokenRefresh; protected virtual void OnTokenRefresh(WeixinAccount account) { var handler = TokenRefresh; if (handler != null) handler(this); } /// /// jsapi_ticket /// private string jsapi_ticket; /// /// access_token /// private string access_token; /// /// jsapi_ticket到期时间 /// private DateTime jsapi_ticket_time; /// /// access_token到期时间 /// private DateTime access_token_time; /// /// 公众号名称 /// public string Id { get; set; } public string AppId { get; set; } public string AppSecret { get; set; } public string JsapiTicket { get { if (jsapi_ticket_time < DateTime.Now) { var ticket = WeixinAction.GetJsapiTicket(AccessToken); if (ticket == null || ticket.ErrorCode != 0) return string.Empty; jsapi_ticket = ticket.Ticket; jsapi_ticket_time = DateTime.Now.AddSeconds(ticket.ExpiresIn-200); } return jsapi_ticket; } } public string AccessToken { get { if (access_token_time < DateTime.Now) { var token = WeixinAction.GetWeixinToken(AppId, AppSecret); if (token == null) return string.Empty; access_token = token.AccessToken; access_token_time = DateTime.Now.AddSeconds(token.ExpiresIn-200);//token.ExpiresIn OnTokenRefresh(this); } return access_token; } } /// /// 实例化微信公众号 /// /// /// /// public WeixinAccount(string id, string appid, string secret) { Id = id; AppId = appid; AppSecret = secret; access_token_time = DateTime.Parse("1970-01-01"); jsapi_ticket_time = DateTime.Parse("1970-01-01"); } public WeixinAccount(string id, string appid, string secret,DateTime accesstokentime,DateTime jsapitickettime) { Id = id; AppId = appid; AppSecret = secret; access_token_time = accesstokentime; jsapi_ticket_time = jsapitickettime; } public void Update(string appid, string secret) { if (AppId != appid || AppSecret != secret) { AppId = appid; AppSecret = secret; access_token_time = DateTime.Parse("1970-01-01"); jsapi_ticket_time = DateTime.Parse("1970-01-01"); } } } }