using MessagePack;
using Microsoft.WindowsAzure.Storage.Table;
using System;
using System.Collections.Generic;
using System.Text;
using TEAMModelOS.SDK.Context.Attributes.Azure;

namespace HiTeachCC.Model.Core.Models
{
    /// <summary>
    /// access_token 的存储与更新
    ///access_token 的存储至少要保留 512 个字符空间；
    ///access_token 的有效期目前为 2 个小时，需定时刷新，重复获取将导致上次获取的 access_token 失效；
    ///建议开发者使用中控服务器统一获取和刷新 access_token，其他业务逻辑服务器所使用的 access_token 均来自于该中控服务器，不应该各自去刷新，否则容易造成冲突，导致 access_token 覆盖而影响业务；
    ///access_token 的有效期通过返回的 expire_in 来传达，目前是7200秒之内的值，中控服务器需要根据这个有效时间提前去刷新。在刷新过程中，中控服务器可对外继续输出的老 access_token，此时公众平台后台会保证在5分钟内，新老 access_token 都可用，这保证了第三方业务的平滑过渡；
    ///access_token 的有效时间可能会在未来有调整，所以中控服务器不仅需要内部定时主动刷新，还需要提供被动刷新 access_token 的接口，这样便于业务服务器在API调用获知 access_token 已超时的情况下，可以触发 access_token 的刷新流程。
    /// </summary>
    [TableSpace(Name = "Core")]
    [MessagePackObject(keyAsPropertyName: true)]
    public class MiniAPPToken :TableEntity
    {
        public string access_token { get; set; }
        public int expires_in { get; set; }
        /// <summary>
        /// -1      系统繁忙，此时请开发者稍候再试  
        /// 0       请求成功  
        /// 40001	AppSecret 错误或者 AppSecret 不属于这个小程序，请开发者确认 AppSecret 的正确性
        /// 40002	请确保 grant_type 字段值为 client_credential
        /// 40013	不合法的 AppID，请开发者检查 AppID 的正确性，避免异常字符，注意大小写
        /// </summary>
        public int errcode { get; set; }
        public string errmsg { get; set; }
    }
}
