/// <summary> /// 获取微信JS接口的临时票据 /// </summary> /// <param name="token"></param> /// <param name="oldTicket">旧的凭据(为空则会尝试用已经获取到的未过期票据)</param> /// <returns></returns> public static JsTicket GetJsTicket(this AccessToken token, JsTicket oldTicket = null) { if (oldTicket == null) { oldTicket = ticketDic.Where(d => d.Key == token).Select(d => d.Value).FirstOrDefault(); } if (oldTicket != null && oldTicket.ExpiresTime > DateTime.Now) { return(oldTicket); } if (Monitor.TryEnter(ticketDic, TimeSpan.FromMilliseconds(100))) { var data = Api.Ticket.GetJsTicket(token.access_token); ticketDic[token] = data; var removeList = ticketDic.Where(d => d.Value.ExpiresTime < DateTime.Now).Select(d => d.Key).ToList(); foreach (var item in removeList) { ticketDic.Remove(item); } Monitor.Exit(ticketDic); return(data); } else { return(oldTicket); } }
public JsTicket GetJsTicket() { try { JsTicket ticket = null; WeiXinToken token = _tokenProvider.GetToken(); if (token.JsTicket != null) { ticket = token.JsTicket; return(ticket); } AccessToken accessToken = this.GetAccessToken(); string url = string.Format(WeiXinConst.JS_TICKET_URL, accessToken.Value); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); WebResponse response = request.GetResponse(); if (response.GetResponseStream() != null) { StreamReader sr = new StreamReader(response.GetResponseStream()); string json = sr.ReadToEnd(); JavaScriptSerializer serlizer = new JavaScriptSerializer(); var obj = serlizer.Deserialize <dynamic>(json); ticket.Value = obj.ticket; ticket.ExpireIn = obj.expires_in; token.JsTicket = ticket; _tokenProvider.SaveToken(token); } return(ticket); } catch (Exception ex) { throw ex; } }
public static JsTicket GetJsTicket(string access_token, JsTicket oldTicket = null) => oldTicket?.ExpiresTime < DateTime.Now ? oldTicket : GetJsTicket(access_token);
/// <summary> /// 获取前端网页初始化接口的必要参数 /// 返回Json字符串{appid,timestamp,nonce,signature} /// </summary> /// <param name="ticket"></param> /// <param name="cfg">基础接口配置</param> /// <param name="url">调用页面的Url</param> /// <returns></returns> public static string CreatePackage(this JsTicket ticket, Config cfg, string url) => Api.Ticket.CreateJsPackage(cfg.AppId, ticket.ticket, url);