private AuthorizationInfoModel Refresh(string authorizerAppID, string authorizerAccessTokenOld, string authorizerRefreshToken, string componentAccessToken)
        {
            DateTime refreshTime = DateTime.Now;

            // access_token
            string url_5 = "https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token=" + componentAccessToken;

            LogHelper.Info("5、获取(刷新)授权公众号的接口调用凭据(令牌) url_5", url_5);
            AuthorizerAccessTokenGetReq req_5 = new AuthorizerAccessTokenGetReq()
            {
                ComponentAppID         = ConfigHelper.ComponentAppID,
                AuthorizerAppID        = authorizerAppID,
                AuthorizerRefreshToken = authorizerRefreshToken
            };
            string requestBody_5 = JsonConvert.SerializeObject(req_5);

            LogHelper.Info("5、获取(刷新)授权公众号的接口调用凭据(令牌) requestBody_5", requestBody_5);
            string responseBody_5 = HttpHelper.Post(url_5, requestBody_5);

            LogHelper.Info("5、获取(刷新)授权公众号的接口调用凭据(令牌) responseBody_5", responseBody_5);
            AuthorizerAccessTokenGetResp resp = JsonConvert.DeserializeObject <AuthorizerAccessTokenGetResp>(responseBody_5);

            // jsapi_ticket
            string url_jsapi = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + resp.AuthorizerAccessToken + "&type=jsapi";

            LogHelper.Info("获取(刷新)jsapi_ticket url_jsapi", url_jsapi);
            string responseBody_jsapi = HttpHelper.Get(url_jsapi);

            LogHelper.Info("获取(刷新)jsapi_ticket responseBody_jsapi", responseBody_jsapi);
            TicketGetResp resp_jsapi = JsonConvert.DeserializeObject <TicketGetResp>(responseBody_jsapi);

            // api_ticket
            string url_api = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + resp.AuthorizerAccessToken + "&type=wx_card";

            LogHelper.Info("获取(刷新)api_ticket url_api", url_api);
            string responseBody_api = HttpHelper.Get(url_api);

            LogHelper.Info("获取(刷新)api_ticket responseBody_api", responseBody_api);
            TicketGetResp resp_api = JsonConvert.DeserializeObject <TicketGetResp>(responseBody_api);

            // 刷新
            authorizationInfoDAL.Refresh(authorizerAppID, authorizerAccessTokenOld /* old */, resp.AuthorizerAccessToken, resp.ExpiresIn, resp.AuthorizerRefreshToken, resp_jsapi.Ticket, resp_api.Ticket, refreshTime);

            return(new AuthorizationInfoModel {
                AuthorizerAccessToken = resp.AuthorizerAccessToken, JSAPITicket = resp_jsapi.Ticket, APITicket = resp_api.Ticket
            });
        }
        public RESTfulModel Save(SaveAuthModel model)
        {
            // 授权信息存数据库
            try
            {
                // 验证

                // jsapi_ticket
                string url_jsapi = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + model.AuthorizerAccessToken + "&type=jsapi";
                LogHelper.Info("获取(刷新)jsapi_ticket url_jsapi", url_jsapi);
                string responseBody_jsapi = HttpHelper.Get(url_jsapi);
                LogHelper.Info("获取(刷新)jsapi_ticket responseBody_jsapi", responseBody_jsapi);
                TicketGetResp resp_jsapi = JsonConvert.DeserializeObject <TicketGetResp>(responseBody_jsapi);

                // api_ticket
                string url_api = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + model.AuthorizerAccessToken + "&type=wx_card";
                LogHelper.Info("获取(刷新)api_ticket url_api", url_api);
                string responseBody_api = HttpHelper.Get(url_api);
                LogHelper.Info("获取(刷新)api_ticket responseBody_api", responseBody_api);
                TicketGetResp resp_api = JsonConvert.DeserializeObject <TicketGetResp>(responseBody_api);

                AuthorizationInfoModel authorizationInfoModel = authorizationInfoDAL.GetModel(model.AuthorizerAppID);
                if (authorizationInfoModel != null)
                {
                    // 更新
                    authorizationInfoDAL.Update(
                        model.AuthorizerAppID,
                        authorizationInfoModel.AuthorizerAccessToken,// 当前的置为旧的,用于消息延时
                        model.AuthorizerAccessToken,
                        model.ExpiresIn,
                        model.AuthorizerRefreshToken,
                        resp_jsapi.Ticket,
                        resp_api.Ticket,
                        model.AuthTime);
                }
                else
                {
                    // 插入
                    authorizationInfoDAL.Insert(
                        model.AuthorizerAppID,
                        model.AuthorizerAccessToken,
                        model.AuthorizerAccessToken,
                        model.ExpiresIn,
                        model.AuthorizerRefreshToken,
                        resp_jsapi.Ticket,
                        resp_api.Ticket,
                        model.AuthTime);
                }

                return(new RESTfulModel()
                {
                    Code = (int)CodeEnum.成功, Msg = string.Format(codeMsgDAL.GetByCode((int)CodeEnum.成功), "成功")
                });
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex);
                return(new RESTfulModel()
                {
                    Code = (int)CodeEnum.系统异常, Msg = codeMsgDAL.GetByCode((int)CodeEnum.系统异常)
                });
            }
        }