public static T TryCommonTicketApi <T>(Func <string, T> fun, string AppId, string strSecret, bool retryIfFaild = true) where T : WxJsonResult
        {
            string appId  = null;
            string ticket = null;

            if (AppId == null)
            {
                //appId = AccessTokenContainer.GetFirstOrDefaultAppId();
                if (appId == null)
                {
                    throw new UnRegisterAppIdException(null,
                                                       "尚无已经注册的AppId,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!");
                }
            }
            else if (ApiUtility.IsAppId(AppId))
            {
                //if (!AccessTokenContainer.CheckRegistered(AppId))
                //{
                //    throw new UnRegisterAppIdException(AppId, string.Format("此appId({0})尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!", AppId));
                //}

                appId = AppId;
            }
            else
            {
                //accessToken
                ticket = AppId;
            }


            T result = null;

            try
            {
                if (ticket == null)
                {
                    var accessTokenResult = JsApiTicketContainer.GetJsApiTicketResult(appId, strSecret, Innocellence.Weixin.MP.CommonAPIs.CommonApi.GetTicket, false);
                    ticket = accessTokenResult.ticket;
                }
                result = fun(ticket);
            }
            catch (ErrorJsonResultException ex)
            {
                if (retryIfFaild &&
                    appId != null &&
                    ex.JsonResult.errcode == ReturnCode.Ticket不合法)
                {
                    JsApiTicketContainer.UpdateNull(appId, strSecret);

                    //尝试重新验证
                    var accessTokenResult = JsApiTicketContainer.GetJsApiTicketResult(appId, strSecret, Innocellence.Weixin.MP.CommonAPIs.CommonApi.GetTicket, false);//强制获取并刷新最新的AccessToken

                    if (ticket == accessTokenResult.ticket)
                    {
                        accessTokenResult = JsApiTicketContainer.GetJsApiTicketResult(appId, strSecret, Innocellence.Weixin.MP.CommonAPIs.CommonApi.GetTicket, true);
                    }


                    ticket = accessTokenResult.ticket;


                    result = fun(ticket);
                    //result = TryCommonApi(fun, appId,strSecret, false);
                }
                else
                {
                    throw;
                }
            }

            return(result);
        }