/// <summary> /// 生成签名 /// </summary> private void CreateSignature() { JsapiTicket jsapiTicket = this.CreateJsapiTicket(); string string1 = string.Format("jsapi_ticket={0}&noncestr={1}×tamp={2}&url={3}", jsapiTicket.ticket, this.nonceStr, this.timestamp, url); this.signature = FormsAuthentication.HashPasswordForStoringInConfigFile(string1, "SHA1").ToLower(); }
/// <summary> /// 获取jsapi_ticket /// </summary> /// <returns></returns> public static string GetJsapiTicket() { string accessToken = GetAccessToken(); string key = "jsapi_ticket"; if (CacheExtend.HasCache(key)) { return(CacheExtend.GetCache <JsapiTicket>(key).ticket); } lock (_lock) { if (CacheExtend.HasCache(key)) { return(CacheExtend.GetCache <JsapiTicket>(key).ticket); } JsapiTicket ticket = null; try { LogHelper.WriteLog("GetJsapiTicket-accessToken:" + accessToken); HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", accessToken)); req.Method = "GET"; using (WebResponse wr = req.GetResponse()) { HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse(); StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); string content = reader.ReadToEnd(); LogHelper.WriteLog("content:" + content); if (!string.IsNullOrEmpty(content)) { ticket = JsonHelper.JsonToObject <JsapiTicket>(content); if (ticket != null) { LogHelper.WriteLog("ticket:" + ticket.ticket); //LogHelper.WriteLog("jsapi_ticket插入缓存,jsapi_ticket有效期为:" + (ticket.expires_in - 1800).ToString()); CacheExtend.CacheInsert(key, ticket, DateTime.Now.AddSeconds(ticket.expires_in - 1800)); } else { LogHelper.WriteLog(ErrorManage.GetErrorInfo(ticket.errcode ?? -1)); } } else { LogHelper.WriteLog("jsapi_ticket 返回的值为NULL"); } } } catch (Exception ex) { LogHelper.WriteLog(string.Format("{0}\n{1}\n{2}\n", ex.Message, ex.Source, ex.StackTrace)); } return(ticket == null ? "" : ticket.ticket); } }
/// <summary> /// 获取jsticket /// </summary> private JsapiTicket GetTicket(string AppName, string access_token) { string CACHE_KEY = "_JSAPI_TICKET-" + AppName; var jsticket = CacheManager.Instance.Get <JsapiTicket>(CACHE_KEY); if (jsticket == null) { jsticket = new JsapiTicket().GetTicket(access_token); CacheManager.Instance.Insert <JsapiTicket>(CACHE_KEY, jsticket, DateTime.Now.AddMinutes(115)); } if (jsticket.IsExpires) { CacheManager.Instance.Remove(CACHE_KEY); jsticket = new JsapiTicket().GetTicket(access_token); CacheManager.Instance.Insert <JsapiTicket>(CACHE_KEY, jsticket, DateTime.Now.AddMinutes(115)); } return(jsticket); }
public bool Update(JsapiTicket ticket) { return(true); }
/// <summary> /// 页面加载 /// </summary> protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (AppConfig.Mode == AppConfig.CodeMode.Production) { #region 客户版本 Response.AddHeader("Access-Control-Allow-Origin", AppConfig.MoblieInterfaceDomain); string time = GameRequest.GetQueryString("time"); string sign = GameRequest.GetQueryString("sign"); //签名验证 AjaxJsonValid ajv = Fetch.VerifySignData((AppConfig.MoblieInterfaceKey + time), sign); if (ajv.code == (int)ApiCode.VertySignErrorCode) { Response.Write(ajv.SerializeToJson()); return; } object obj = WHCache.Default.Get <AspNetCache>(AppConfig.WxTicket); TicketCache tc = obj as TicketCache; if (tc == null) { try { string url = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={WxAuthorize.Appid}&secret={WxAuthorize.Appsecret}"; string result = WxHttpService.Get(url); JavaScriptSerializer js = new JavaScriptSerializer(); AccessToken at = js.Deserialize <AccessToken>(result); if (at.errcode > 0) { ajv.msg = at.errmsg; Response.Write(ajv.SerializeToJson()); return; } url = $"https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={at.access_token}&type=jsapi"; result = WxHttpService.Get(url); JsapiTicket jt = js.Deserialize <JsapiTicket>(result); if (jt.errcode > 0) { ajv.msg = at.errmsg; Response.Write(ajv.SerializeToJson()); return; } tc = new TicketCache(); tc.access_token = at.access_token; tc.ticket = jt.ticket; int timeout = (at.expires_in / 60) - 3; WHCache.Default.Save <AspNetCache>(AppConfig.WxTicket, tc, timeout); } catch (Exception) { Response.Write(ajv.SerializeToJson()); return; } } ajv.SetValidDataValue(true); ajv.SetDataItem("access_token", tc.access_token); ajv.SetDataItem("ticket", tc.ticket); Response.Write(ajv.SerializeToJson()); #endregion } else { #region 演示版本 string time = GameRequest.GetQueryString("time"); string sign = GameRequest.GetQueryString("sign"); Response.Redirect("http://ry.foxuc.net/JJTicket.aspx?time=" + time + "&sign=" + sign); #endregion } } }