/// <summary> /// 使用AccessToken进行操作时,如果遇到AccessToken错误的情况,重新获取AccessToken一次,并重试。 /// 使用此方法之前必须使用AccessTokenContainer.Register(_appId, _appSecret);或JsApiTicketContainer.Register(_appId, _appSecret);方法对账号信息进行过注册,否则会出错。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="fun"></param> /// <param name="accessTokenOrAppKey">AccessToken或AppKey。如果为null,则自动取已经注册的第一个corpId/corpSecret来信息获取AccessToken。</param> /// <param name="retryIfFaild">请保留默认值true,不用输入。</param> /// <returns></returns> public static T TryCommonApi<T>(Func<string, T> fun, string accessTokenOrAppKey, bool retryIfFaild = true) where T : WorkJsonResult { Func<string> accessTokenContainer_GetFirstOrDefaultAppIdFunc = () => AccessTokenContainer.GetFirstOrDefaultAppId(); Func<string, bool> accessTokenContainer_CheckRegisteredFunc = appKey => { /* * 对于企业微信来说,AppId = key = CorpId+'@'+CorpSecret */ return AccessTokenContainer.CheckRegistered(appKey); }; Func<string, bool, IAccessTokenResult> accessTokenContainer_GetAccessTokenResultFunc = (appKey, getNewToken) => { /* * 对于企业微信来说,AppId = key = CorpId+'@'+CorpSecret */ return AccessTokenContainer.GetTokenResult(appKey, getNewToken); }; int invalidCredentialValue = (int)ReturnCode_Work.获取access_token时Secret错误_或者access_token无效; var result = ApiHandlerWapperBase. TryCommonApiBase( PlatformType.Work, accessTokenContainer_GetFirstOrDefaultAppIdFunc, accessTokenContainer_CheckRegisteredFunc, accessTokenContainer_GetAccessTokenResultFunc, invalidCredentialValue, fun, accessTokenOrAppKey, retryIfFaild); return result; }
/// <summary> /// 使用AccessToken进行操作时,如果遇到AccessToken错误的情况,重新获取AccessToken一次,并重试。 /// 使用此方法之前必须使用AccessTokenContainer.Register(_appId, _appSecret);或JsApiTicketContainer.Register(_appId, _appSecret);方法对账号信息进行过注册,否则会出错。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="fun"></param> /// <param name="accessTokenOrAppKey">AccessToken或AppKey。如果为null,则自动取已经注册的第一个corpId/corpSecret来信息获取AccessToken。</param> /// <param name="retryIfFaild">请保留默认值true,不用输入。</param> /// <returns></returns> public static T TryCommonApi <T>(Func <string, T> fun, string accessTokenOrAppKey, bool retryIfFaild = true) where T : WorkJsonResult, new() { var result = ApiHandlerWapperBase. TryCommonApiBase( PlatformType.Work, AccessTokenContainer_GetFirstOrDefaultAppIdFunc, AccessTokenContainer_CheckRegisteredFunc, AccessTokenContainer_GetAccessTokenResultFunc, InvalidCredentialValues, fun, accessTokenOrAppKey, retryIfFaild); return(result); }
/// <summary> /// 使用AccessToken进行操作时,如果遇到AccessToken错误的情况,重新获取AccessToken一次,并重试。 /// 使用此方法之前必须使用AccessTokenContainer.Register(_appId, _appSecret);或JsApiTicketContainer.Register(_appId, _appSecret);方法对账号信息进行过注册,否则会出错。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="fun"></param> /// <param name="accessTokenOrAppId">AccessToken或AppId。如果为null,则自动取已经注册的第一个appId/appSecret来信息获取AccessToken。</param> /// <param name="retryIfFaild">请保留默认值true,不用输入。</param> /// <returns></returns> public static T TryCommonApi <T>(Func <string, T> fun, string accessTokenOrAppId = null, bool retryIfFaild = true) where T : WxOpenJsonResult { Func <string> accessTokenContainer_GetFirstOrDefaultAppIdFunc = () => AccessTokenContainer.GetFirstOrDefaultAppId(PlatformType.WeChat_MiniProgram); Func <string, bool> accessTokenContainer_CheckRegisteredFunc = appId => AccessTokenContainer.CheckRegistered(appId); Func <string, bool, IAccessTokenResult> accessTokenContainer_GetAccessTokenResultFunc = (appId, getNewToken) => AccessTokenContainer.GetAccessTokenResult(appId, getNewToken); int invalidCredentialValue = (int)ReturnCode.获取access_token时AppSecret错误或者access_token无效; var result = ApiHandlerWapperBase. TryCommonApiBase( PlatformType.WeChat_OfficialAccount, accessTokenContainer_GetFirstOrDefaultAppIdFunc, accessTokenContainer_CheckRegisteredFunc, accessTokenContainer_GetAccessTokenResultFunc, invalidCredentialValue, fun, accessTokenOrAppId, retryIfFaild); return(result); }
/// <summary> /// 使用AccessToken进行操作时,如果遇到AccessToken错误的情况,重新获取AccessToken一次,并重试。 /// 使用此方法之前必须使用AccessTokenContainer.Register(_appId, _appSecret);或JsApiTicketContainer.Register(_appId, _appSecret);方法对账号信息进行过注册,否则会出错。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="fun"></param> /// <param name="accessTokenOrAppId">AccessToken或AppId。如果为null,则自动取已经注册的第一个appId/appSecret来信息获取AccessToken。</param> /// <param name="retryIfFaild">请保留默认值true,不用输入。</param> /// <returns></returns> public static T TryCommonApi <T>(Func <string, T> fun, string accessTokenOrAppId = null, bool retryIfFaild = true) where T : WxJsonResult { Func <string> accessTokenContainer_GetFirstOrDefaultAppIdFunc = () => AccessTokenContainer.GetFirstOrDefaultAppId(PlatformType.MP); Func <string, bool> accessTokenContainer_CheckRegisteredFunc = appId => AccessTokenContainer.CheckRegistered(appId); Func <string, bool, IAccessTokenResult> accessTokenContainer_GetAccessTokenResultFunc = (appId, getNewToken) => AccessTokenContainer.GetAccessTokenResult(appId, getNewToken); int invalidCredentialValue = (int)ReturnCode.获取access_token时AppSecret错误或者access_token无效; var result = ApiHandlerWapperBase. TryCommonApiBase( PlatformType.MP, accessTokenContainer_GetFirstOrDefaultAppIdFunc, accessTokenContainer_CheckRegisteredFunc, accessTokenContainer_GetAccessTokenResultFunc, invalidCredentialValue, fun, accessTokenOrAppId, retryIfFaild); return(result); #region V1.0方法 //ApiHandlerWapperFactory.ApiHandlerWapperFactoryCollection["s"] = ()=> new Senparc.Weixin.MP.AdvancedAPIs.User.UserInfoJson(); //var platform = ApiHandlerWapperFactory.CurrentPlatform;//当前平台 //string appId = null; //string accessToken = null; //if (accessTokenOrAppId == null) //{ // appId = AccessTokenContainer.GetFirstOrDefaultAppId(); // if (appId == null) // { // throw new UnRegisterAppIdException(null, // "尚无已经注册的AppId,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!"); // } //} //else if (ApiUtility.IsAppId(accessTokenOrAppId)) //{ // if (!AccessTokenContainer.CheckRegistered(accessTokenOrAppId)) // { // throw new UnRegisterAppIdException(accessTokenOrAppId, string.Format("此appId({0})尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!", accessTokenOrAppId)); // } // appId = accessTokenOrAppId; //} //else //{ // accessToken = accessTokenOrAppId;//accessToken //} //T result = null; //try //{ // if (accessToken == null) // { // var accessTokenResult = AccessTokenContainer.GetAccessTokenResult(appId, false); // accessToken = accessTokenResult.access_token; // } // result = fun(accessToken); //} //catch (ErrorJsonResultException ex) //{ // if (retryIfFaild // && appId != null // && ex.JsonResult.errcode == ReturnCode.获取access_token时AppSecret错误或者access_token无效) // { // //尝试重新验证 // var accessTokenResult = AccessTokenContainer.GetAccessTokenResult(appId, true); // //强制获取并刷新最新的AccessToken // accessToken = accessTokenResult.access_token; // result = TryCommonApi(fun, appId, false); // } // else // { // ex.AccessTokenOrAppId = accessTokenOrAppId; // throw; // } //} //catch (WeixinException ex) //{ // ex.AccessTokenOrAppId = accessTokenOrAppId; // throw; //} //return result; #endregion }