/// <summary> /// 获取可用AccessToken /// </summary> /// <param name="componentAppId"></param> /// <param name="componentVerifyTicket">如果为null则自动获取</param> /// <param name="getNewToken">是否强制重新获取新的Token</param> /// <returns></returns> public static ComponentAccessTokenResult GetComponentAccessTokenResult(string componentAppId, string componentVerifyTicket = null, bool getNewToken = false) { if (!CheckRegistered(componentAppId)) { throw new WeixinOpenException(UN_REGISTER_ALERT); } var accessTokenBag = TryGetItem(componentAppId); using (Cache.BeginCacheLock(LockResourceName + ".GetComponentAccessTokenResult", componentAppId))//同步锁 { if (getNewToken || accessTokenBag.ComponentAccessTokenExpireTime <= DateTime.Now) { //已过期,重新获取 componentVerifyTicket = componentVerifyTicket ?? TryGetComponentVerifyTicket(componentAppId); var componentAccessTokenResult = ComponentApi.GetComponentAccessToken(accessTokenBag.ComponentAppId, accessTokenBag.ComponentAppSecret, componentVerifyTicket); accessTokenBag.ComponentAccessTokenResult = componentAccessTokenResult; accessTokenBag.ComponentAccessTokenExpireTime = ApiUtility.GetExpireTime(componentAccessTokenResult.expires_in); Update(accessTokenBag);//更新到缓存 } } return(accessTokenBag.ComponentAccessTokenResult); }
public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage) { if (requestMessage.Content == "TESTCOMPONENT_MSG_TYPE_TEXT") { var responseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>(); responseMessage.Content = requestMessage.Content + "_callback";//固定为TESTCOMPONENT_MSG_TYPE_TEXT_callback return(responseMessage); } if (requestMessage.Content.StartsWith("QUERY_AUTH_CODE:")) { string openTicket = OpenTicketHelper.GetOpenTicket(componentAppId); var query_auth_code = requestMessage.Content.Replace("QUERY_AUTH_CODE:", ""); try { var component_access_token = ComponentApi.GetComponentAccessToken(componentAppId, componentSecret, openTicket).component_access_token; var oauthResult = ComponentApi.QueryAuth(component_access_token, componentAppId, query_auth_code); //调用客服接口 var content = query_auth_code + "_from_api"; var sendResult = CustomApi.SendText(oauthResult.authorization_info.authorizer_access_token, requestMessage.FromUserName, content); } catch (Exception ex) { throw; } } return(null); }
public void ComponetAccessToken(PerformContext context = null) { context.WriteLine("开始检查ComponetAccessToken..."); if (!_redis.KeyExists(CacheKey.ComponentAccessToken) || _redis.KeyTimeToLive(CacheKey.ComponentAccessToken) < new TimeSpan(0, 30, 0)) { context.WriteLine("需要更新ComponetAccessToken..."); if (_redis.KeyExists(CacheKey.ComponentVerifyTicket)) { context.WriteLine("开始更新ComponetAccessToken..."); var resp = ComponentApi.GetComponentAccessToken(_config["Wechat:AppID"], _config["Wechat:AppSecret"], _redis.StringGet(CacheKey.ComponentVerifyTicket)); if (resp.ErrCode == 0) { _redis.StringSet(CacheKey.ComponentAccessToken, resp.ComponentAccessToken, new TimeSpan(0, 0, resp.ExpiresIn)); context.WriteLine("更新ComponetAccessToken成功..."); } else { context.WriteLine("更新ComponetAccessToken发生错误:" + resp.ErrMsg); throw new ServiceException(resp.ErrCode, resp.ErrMsg); } } else { context.WriteLine("更新ComponetAccessToken发生错误:ComponentVerifyTicket不存在..."); throw new ServiceException(-1, "更新ComponetAccessToken发生错误:ComponentVerifyTicket不存在..."); } } else { context.WriteLine("检查ComponetAccessToken完毕..."); } }
public override string OnComponentVerifyTicketRequest(RequestMessageComponentVerifyTicket requestMessage) { ComponentTokenService cts = new ComponentTokenService(); var componentToken = cts.GetToken(); componentToken.ComponentVerifyTicketCreateOn = DateTime.Now; componentToken.ComponentVerifyTicket = requestMessage.ComponentVerifyTicket; cts.SaveVerifyToken(componentToken); var expiredTime = componentToken.ComponentAccessTokenCreateOn.AddSeconds(componentToken.ComponentAccessTokenExpiresIn); if (ExpiresIn(expiredTime, 1200)) { //Refresh the token before 1200 seconds when it expired try { var updatedToken = ComponentApi.GetComponentAccessToken(ConfigurationManager.AppSettings["AppId"], ConfigurationManager.AppSettings["AppSecret"], componentToken.ComponentVerifyTicket); componentToken.ComponentAccessTokenCreateOn = DateTime.Now; componentToken.ComponentAccessTokenExpiresIn = updatedToken.expires_in; componentToken.ComponentAccessToken = updatedToken.component_access_token; cts.SaveAccessToken(componentToken); Log("update access token to " + JsonConvert.SerializeObject(componentToken)); } catch (Exception e) { Log(e.ToString(), true); } } expiredTime = componentToken.PreAuthCodeCreateOn.AddSeconds(componentToken.PreAuthCodeExpiresIn); if (ExpiresIn(expiredTime, 1200)) { try { var updatedCode = ComponentApi.GetPreAuthCode(ConfigurationManager.AppSettings["AppId"], componentToken.ComponentAccessToken); componentToken.PreAuthCodeExpiresIn = updatedCode.expires_in; componentToken.PreAuthCode = updatedCode.pre_auth_code; componentToken.PreAuthCodeCreateOn = DateTime.Now; cts.SavePreAuthCode(componentToken); Log("update preauth to " + JsonConvert.SerializeObject(componentToken)); } catch (Exception e2) { Log(e2.ToString(), true); } } return(base.OnComponentVerifyTicketRequest(requestMessage)); }
public void UpdateAccessData() { var ad = ComponentKeys.GetInstance().AccessData; var atRlt = ComponentApi.GetComponentAccessToken(_wxConfig.AppId, _wxConfig.AppSecret, ComponentKeys.GetInstance().VerifyData.Ticket); ad.AccessCode = atRlt.component_access_token; ad.ExpiresIn = atRlt.expires_in; ad.RefreshOn = DateTime.Now; //store to db basicToken.AccessToken = ad.AccessCode; basicToken.AccessTokenRefreshOn = ad.RefreshOn; basicToken.AccessTokenExpiresIn = ad.ExpiresIn; }
public ComponentToken ForceRefresh() { using (ApplicationDbContext _context = new ApplicationDbContext()) { var componentToken = _context.ComponentTokens.OrderByDescending(c => c.Id).First(); try { var updatedToken = ComponentApi.GetComponentAccessToken(ConfigurationManager.AppSettings["AppId"], ConfigurationManager.AppSettings["AppSecret"], componentToken.ComponentVerifyTicket); componentToken.ComponentAccessTokenCreateOn = DateTime.Now; componentToken.ComponentAccessTokenExpiresIn = updatedToken.expires_in; componentToken.ComponentAccessToken = updatedToken.component_access_token; _context.SaveChanges(); } catch (Exception e) { Log(e.ToString()); } return(componentToken); } }