public void Start() { lock (lockStart) { if (thread != null) { return; } enabled = true; } thread = new System.Threading.Thread( () => { while (enabled) { try { ConfigModel config = ConfigManager.GetConfig(this.appId); ApiTicketModel apiTicketModel = SendHandler.GetApiTicket(config.AccessToken); apiTicketModel.appId = appId; /** * 为了重用,将ApiTicket对象以事件的形式广播出去。 * 在这里,保存好ApiTicket,以供项目在其他地方使用。 * 你可以保存到数据库中,也可以保存到全局变量中。 */ if (this.ApiTicketEvent != null) { try { this.ApiTicketEvent(apiTicketModel); } catch (Exception ex) { } } if (apiTicketModel.errcode != 0) { System.Threading.Thread.Sleep(millisecondsErrorContinue); //如果出现异常,X秒后重新请求. continue; } } catch (Exception e) { System.Threading.Thread.Sleep(millisecondsErrorContinue); //如果出现异常,X秒后重新请求. continue; } finally { } System.Threading.Thread.Sleep(millisecondsTimeout); } }); thread.Start(); }
/// <summary> /// 获取ApiTicket /// 卡券 api_ticket 是用于调用卡券相关接口的临时票据,有效期为 7200 秒,通过 access_token 来获取。 /// 这里要注意与 jsapi_ticket 区分开来。由于获取卡券 api_ticket 的 api 调用次数非常有限, /// 频繁刷新卡券 api_ticket 会导致 api 调用受限,影响自身业务,开发者必须在自己的服务全局缓存卡券 api_ticket 。 /// </summary> /// <param name="accessToken"></param> /// <returns></returns> public static ApiTicketModel GetApiTicket(string accessToken) { string url = ApiUrl.GetApiTicketUrl(accessToken); String json = HttpHelper.ScrapeWebPage(url); JObject jo = JObject.Parse(json); ApiTicketModel model = jo.ToObject <ApiTicketModel>(); return(model); }
/// <summary> /// 获取ApiTicket /// 卡券 api_ticket 是用于调用卡券相关接口的临时票据,有效期为 7200 秒,通过 access_token 来获取。 /// 这里要注意与 jsapi_ticket 区分开来。由于获取卡券 api_ticket 的 api 调用次数非常有限, /// 频繁刷新卡券 api_ticket 会导致 api 调用受限,影响自身业务,开发者必须在自己的服务全局缓存卡券 api_ticket 。 /// </summary> /// <param name="config"></param> /// <returns></returns> public static ApiTicketModel GetApiTicket(ConfigModel config) { ApiTicketModel model = GetApiTicket(config.AccessToken); return(model); }