/// <summary>
        /// 获取 WXOpenCmptAccessToken
        /// </summary>
        /// <param name="opensetting"></param>
        /// <param name="cmpt_verify_ticket"></param>
        /// <returns></returns>
        public string GetCmptAccessToken(WXOpenSetting opensetting, string cmpt_verify_ticket)
        {
            using (ISession s = SessionFactory.Instance.CreateSession())
            {
                //返回的Token字符串
                string cmpt_access_token = string.Empty;

                //当前预授权码对象
                WXOpenCmptAccessToken cmptAccessToken = null;

                //当前凭据参数是否存在
                WXOpenAuth entity = s.Get <WXOpenAuth>("where auth_key = @0 ", WXOpenAuthKey.cmpt_access_token.ToString());

                if (entity == null)
                {
                    entity = new WXOpenAuth();
                }
                else
                {
                    cmptAccessToken   = JsonConvert.DeserializeObject <WXOpenCmptAccessToken>(entity.val);
                    cmpt_access_token = cmptAccessToken.component_access_token;
                }

                //获取授权票据
                if (entity.id == 0 || (cmptAccessToken != null && entity.update_time.AddSeconds(cmptAccessToken.expires_in) < DateTime.Now))
                {
                    cmptAccessToken = WeChatOpenHelper.GetComponentAccessToken(opensetting.component_appid, opensetting.component_appsecret, cmpt_verify_ticket);
                    if (cmptAccessToken.errcode != 0)
                    {
                        string er = "获取微信开放组件Token,方法[GetCmptAccessToken]==>" + JsonConvert.SerializeObject(cmptAccessToken);
                        s.Insert(new APILogs()
                        {
                            type = 1, created_date = DateTime.Now, content = er
                        });
                    }
                    else
                    {
                        //提前10分钟刷新
                        cmptAccessToken.expires_in -= 600;
                        entity.update_time          = DateTime.Now;
                        entity.auth_key             = WXOpenAuthKey.cmpt_access_token.ToString();
                        entity.val = JsonConvert.SerializeObject(cmptAccessToken);

                        cmpt_access_token = cmptAccessToken.component_access_token;

                        if (entity.id == 0)
                        {
                            s.Insert(entity);
                        }
                        else
                        {
                            s.Update(entity);
                        }
                    }
                }

                return(cmpt_access_token);
            }
        }
        /// <summary>
        /// 公众号设置
        /// </summary>
        /// <param name="user"></param>
        /// <param name="auth_code"></param>
        /// <param name="expires_in"></param>
        /// <returns></returns>
        public IActionResult AccountSetting(SysUser user, string auth_code = "", string expires_in = "")
        {
            //当前用户加密ID
            ViewBag.Ticket = StringHelper.GetEncryption(bid.ToString());
            //用户图片路径
            ViewBag.imgurl = string.Empty;

            ViewBag.OpenToken = "";
            ViewBag.AscKey    = "";

            //缺省图片路劲
            ViewBag.defimgurl         = ResXmlConfig.Instance.DefaultImgSrc(AppGlobal.Res, ImgType.WX_Account);
            ViewBag.wx_account_imgurl = ViewBag.defimgurl;
            WeChatAccount account = ServiceIoc.Get <WeChatAccountService>().Get();

            if (account != null)
            {
                Img img = ServiceIoc.Get <ImgService>().GetImg(ImgType.WX_Account, account.id);
                if (img != null)
                {
                    ViewBag.wx_account_imgurl = string.IsNullOrEmpty(img.getImgUrl()) ? ViewBag.defimgurl : img.getImgUrl();
                }
                ViewBag.account = JsonConvert.SerializeObject(account);
            }
            else
            {
                ViewBag.Token = StringHelper.CreateRandomCode(10);
            }

            WeChatMerchant merchant = ServiceIoc.Get <WeChatMerchantService>().Get();

            if (merchant != null)
            {
                ViewBag.merchant = JsonConvert.SerializeObject(merchant);
            }

            WXOpenAccount openAcount = ServiceIoc.Get <WXOpenAccountService>().Get();

            if (openAcount != null)
            {
                ViewBag.openAcount = JsonConvert.SerializeObject(openAcount);
            }

            WXOpenSetting openSetting = ServiceIoc.Get <WXOpenSettingService>().Get();

            if (openSetting != null)
            {
                ViewBag.opensetting = JsonConvert.SerializeObject(openSetting);
            }
            else
            {
                ViewBag.OpenToken = StringHelper.GetRandomCode(10);
                ViewBag.AscKey    = StringHelper.GetRandomCode(43);
            }

            ViewBag.AuthTitle = "待微信推送票据";
            ViewBag.url       = "javascript:;";

            //获取当前凭据
            WXOpenCmptVerifyTicket ticket = ServiceIoc.Get <WXOpenAuthService>().GetCmptVerifyTicket();

            if (ticket != null && ConfigManage.AppSettings <bool>("WeChatSettings:IsOpenAuthUrl"))
            {
                if (ticket.ComponentVerifyTicket != null)
                {
                    ViewBag.WXOpenTicket = ticket.ComponentVerifyTicket.Value;
                    string cmpt_access_token = ServiceIoc.Get <WXOpenAuthService>().GetCmptAccessToken(openSetting, ViewBag.WXOpenTicket);
                    string pre_auth_code     = ServiceIoc.Get <WXOpenAuthService>().GetOpenPreAuthCode(cmpt_access_token, openSetting.component_appid);
                    string redirect_uri      = AppGlobal.Admin + "WeChat/AccountSetting";

                    ViewBag.AuthTitle = "授权公众号";
                    //授权地址
                    ViewBag.url = WeChatOpenHelper.GetOpenOuthUrl(openSetting.component_appid, pre_auth_code, redirect_uri);
                }
            }

            //授权回调
            if (!string.IsNullOrEmpty(auth_code) && !string.IsNullOrEmpty(expires_in))
            {
                //组件Token
                string cmpt_access_token = ServiceIoc.Get <WXOpenAuthService>().GetCmptAccessToken(openSetting, ticket.ComponentVerifyTicket.Value);
                //使用授权码换取公众号的接口调用凭据和授权信息
                WXOpenAuthFun auth_fun = ServiceIoc.Get <WXOpenAuthService>().GetAuthInfo(cmpt_access_token, openSetting.component_appid, auth_code);
                //组件ID
                string cmpt_token = ServiceIoc.Get <WXOpenAuthService>().GetCmptAccessToken(openSetting, ticket.ComponentVerifyTicket.Value);
                //成功
                if (auth_fun != null && !string.IsNullOrEmpty(cmpt_token))
                {
                    ServiceIoc.Get <WXOpenAccountService>().AuthWeChatAccount(user.id, cmpt_token, openSetting.component_appid, auth_fun.authorization_info.authorizer_appid);
                }

                return(Redirect(AppGlobal.Admin + "WeChat/AccountSetting"));
            }

            return(View());
        }