WeixinAccount.cs 3.31 KB
using System;

namespace WeixinApi
{
    /// <summary>
    /// 微信公众号信息
    /// </summary>
    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);
        }

        /// <summary>
        /// jsapi_ticket
        /// </summary>
        private string jsapi_ticket;
        /// <summary>
        /// access_token
        /// </summary>
        private string access_token;
        /// <summary>
        /// jsapi_ticket到期时间
        /// </summary>
        private DateTime jsapi_ticket_time;
        /// <summary>
        /// access_token到期时间
        /// </summary>
        private DateTime access_token_time;
        /// <summary>
        /// 公众号名称
        /// </summary>
        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;
            }
        }

        /// <summary>
        /// 实例化微信公众号
        /// </summary>
        /// <param name="id"></param>
        /// <param name="appid"></param>
        /// <param name="secret"></param>
        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");
            }
        }
    }
}