/// <summary> /// 获取全局JS唯一票据 /// </summary> /// <param name="access_token"></param> /// <returns></returns> public WXAccessTokenCache ApiTicket(string access_token) { using (ISession s = SessionFactory.Instance.CreateSession()) { WXAccessTokenCache ticket = s.Get <WXAccessTokenCache>(" where type = @0 and id != @1 ", "jsapi_ticket", 0); if (ticket == null || ticket.expires_time < DateTime.Now) { if (ticket == null) { ticket = new WXAccessTokenCache(); } //从API获取jsapi_ticket JsApiTicket jsapi_ticket = WeChatJsApiHelper.GetJsApiTicket(access_token); ticket.type = "jsapi_ticket"; ticket.token = jsapi_ticket.ticket; //提前600秒更新token ticket.expires_time = (DateTime)DateTime.Now.AddSeconds(jsapi_ticket.expires_in -= 600); if (ticket == null) { s.Insert <WXAccessTokenCache>(ticket); } else { s.Update <WXAccessTokenCache>(ticket); } } return(ticket); } }
public JsApiTicket GetJsApiTicket(int wid, out string errorMessage) { lock (Obj) { try { var appInfo = _appInfoRepository.GetAppInfo(wid); if (appInfo == null) { errorMessage = string.Format("当前系统无wid为{0}相应公众号的配置", wid); return(null); } if (string.IsNullOrEmpty(appInfo.AppId) || string.IsNullOrEmpty(appInfo.AppSecret)) { errorMessage = string.Format("当前系统wid为{0}相应公众号的配置不完整,AppId或者AppSecret未填写完全,请在[我的公众帐号]里补全信息!", wid); return(null); } var jsApiTicketFromDb = _jsApiTicketRepository.GetJsApiTicket(appInfo); //判断是否存在或者是否过期 if (jsApiTicketFromDb == null || jsApiTicketFromDb.IsExpired()) { //更改已过期的数据 _jsApiTicketRepository.SetJsApiTicketExpire(jsApiTicketFromDb); //重新从微信申请ticket string tokenErrorMessage; var token = new AccessTokenService().GetAccessToken(wid, out tokenErrorMessage); if (token == null || !string.IsNullOrEmpty(tokenErrorMessage)) { throw new Exception(string.Format("获取JsApiTicket失败:{0}", tokenErrorMessage)); } var result = OneGulp.WeChat.MP.CommonAPIs.CommonApi.GetTicket(token.Ticket); var newJsApiTicket = new JsApiTicket() { Id = Guid.NewGuid(), AppId = wid, Ticket = result.ticket, Expires = result.expires_in, SysDateTime = DateTime.Now }; _jsApiTicketRepository.Add(newJsApiTicket); errorMessage = string.Empty; return(newJsApiTicket); } errorMessage = string.Empty; return(jsApiTicketFromDb); } catch (Exception exception) { errorMessage = exception.Message; return(null); } } }
private void RemovedCallback(string key, object value, CacheItemRemovedReason reason) { JsApiTicket jsApiTicket = new JsApiTicket(); jsApiTicket.RemoveCache(); //logs.Fatal("token RemovedCallback to remove ticket"); //HttpContext.Current.Cache.Remove(WeixinConfig.TicketCacheName); }
public string LQCoupon(string OpendID) { var cardId = AppConfig.CardId; string signature = ""; string timestamp = ""; string api_ticket = ""; string sjm = Guid.NewGuid().ToString("d"); //随机码 string nonce_str = "noncestr=" + sjm; //签名必须要用到随机数 //string code = new Random().Next(111111111, 999999999).ToString(); //string openid = OpendID;// "oDRuD1DSi1yyDx9x4_Ttpf_0haB0"; timestamp = Utility.ConvertDateTimeInt(DateTime.Now).ToString(); //string token = Token(AppConfig.FWHOriginalID); string resmsg = NetHelper.HttpRequest(AppConfig.TokenUrl, "", "GET", 2000, Encoding.UTF8, "application/json"); TokeRes toke = JsonHelper.DeserializeObject <TokeRes>(resmsg); string token = toke.Access_Token; string resticket = NetHelper.HttpRequest(AppConfig.CardApiTokenUrl, "", "GET", 2000, Encoding.UTF8, "application/json"); JsApiTicket JsApiTicket = JsonHelper.DeserializeObject <JsApiTicket>(resticket); api_ticket = JsApiTicket.JsApi; // WXCardCommon.GetCardApi(token); //api_ticket = WXCardCommon.GetCardApi(token); //string[] ArrTmp = { cardId, timestamp, api_ticket, code, openid }; string[] ArrTmp = { cardId, timestamp, api_ticket, nonce_str }; Array.Sort(ArrTmp); string tmpStr = string.Join("", ArrTmp); tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1"); signature = tmpStr; CardExt cardExt = new CardExt(); cardExt.timestamp = timestamp; cardExt.signature = signature; cardExt.nonce_str = nonce_str; //cardExt.code = code; //cardExt.openid = openid; var retcardExt = JsonConvert.SerializeObject(cardExt); CardInfoExt CardInfo = new CardInfoExt(); CardInfo.cardId = cardId; CardInfo.cardExt = retcardExt; response.Status = 1; response.Data = CardInfo; return(JsonHelper.ToJSON(response)); }
public void Add(JsApiTicket jsApiTicket) { if (jsApiTicket == null) { return; } _efRepository.Add(jsApiTicket); }
public void SetJsApiTicketExpire(JsApiTicket jsApiTicket) { if (jsApiTicket == null) { return; } jsApiTicket.Expired = true; jsApiTicket.ExpireDateTime = DateTime.Now; _efRepository.Update(jsApiTicket); }
public JsApiTicket GetHsJsApiTicket(string accessToken) { JsApiTicket ticket = new JsApiTicket(); if (ticket.ticket == null) { var url = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", accessToken); string ticketjson = SendGet(url); return(JsonConvert.DeserializeObject <JsApiTicket>(ticketjson)); } return(ticket); }
/// <summary> /// 通过access_token获取 jsApiTicket /// </summary> /// <param name="token"></param> /// <returns></returns> public JsApiTicket GetWXOpenJsApiTicket(string token) { using (ISession s = SessionFactory.Instance.CreateSession()) { //当前预授权码对象 JsApiTicket jsApiTicket = null; //当前凭据参数是否存在 WXOpenAuth entity = s.Get <WXOpenAuth>("where auth_key = @0 ", WXOpenAuthKey.wx_open_jsApi_ticket.ToString()); if (entity == null) { entity = new WXOpenAuth(); } else { jsApiTicket = JsonConvert.DeserializeObject <JsApiTicket>(entity.val); } //获取授权票据 if (entity.id == 0 || (jsApiTicket != null && entity.update_time.AddSeconds(jsApiTicket.expires_in) < DateTime.Now)) { jsApiTicket = WeChatJsApiHelper.GetJsApiTicket(token); if (jsApiTicket.errcode != 0) { string er = "开放平台接口,通过access_token获取jsApiTicket[GetWXOpenJsApiTicket]==>" + JsonConvert.SerializeObject(jsApiTicket); s.Insert(new APILogs() { type = 1, created_date = DateTime.Now, content = er }); } else { //提前2分钟刷新 jsApiTicket.expires_in -= 600; entity.update_time = DateTime.Now; entity.auth_key = WXOpenAuthKey.wx_open_jsApi_ticket.ToString(); entity.val = JsonConvert.SerializeObject(jsApiTicket); if (entity.id == 0) { s.Insert(entity); } else { s.Update(entity); } } } return(jsApiTicket); } }
/// <summary> /// 拿到Tickets /// </summary> /// <param name="CorpId"></param> /// <param name="CorpSecret"></param> /// <returns></returns> public static string GetTickets(string access_token) { string ticket_str = null; try { string url = null; url = string.Format(get_jsapi_ticket_Uri + "{0}&type=jsapi", access_token); string result = HttpHelper.Get(url); JsApiTicket jsApiTicket = JsonConvert.DeserializeObject <JsApiTicket>(result); ticket_str = jsApiTicket.ticket; } catch (Exception ex) { LogHelper.Error(ex); } return(ticket_str); }
public object JsApiSignature(string requestUrl) { AccessToken accessToken = GetAccessToken(); JsApiTicket ticket = GetHsJsApiTicket(accessToken.access_token); string nonceStr = CommonFiled.guid; string timestamp = CommonFiled.unixTime10; var WxConfig = new { debug = false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId = CommonFiled.appID, // 必填,公众号的唯一标识 timestamp, // 必填,生成签名的时间戳 nonceStr, // 必填,生成签名的随机串 jsApiList = new string[] { "chooseImage", "previewImage", "getLocation" }, // 必填,需要使用的JS接口列表 signature = GetJsApiSign(nonceStr, ticket.ticket, timestamp, requestUrl) }; return(WxConfig); }
// 获取公众号全局token public static string GetJsApiTicket() { if (String.IsNullOrEmpty(strJsApiTicket) || expires_time == null || expires_time <= DateTime.Now) { string url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + WXAccessToken.GetAccessToken() + "&type=jsapi"; string jsonTicket = HttpHelper.RequestURL(url, null, "GET"); if (!String.IsNullOrEmpty(jsonTicket)) { JsApiTicket jsTicket = JsonConvert.DeserializeObject <JsApiTicket>(jsonTicket); if (jsTicket != null && !String.IsNullOrEmpty(jsTicket.ticket)) { strJsApiTicket = jsTicket.ticket; expires_time = DateTime.Now.AddSeconds(jsTicket.expires_in - 60); } } } return(strJsApiTicket); }
/// <summary> /// 获取微信的JsApiTicket /// </summary> /// <param name="info"></param> /// <returns></returns> public static string getJsApi_Ticket(WeChatInfo info) { var key = $"WeChatApplicationWithJsApiTicket_{info.appid}"; var access_token = getAccessToken(info); var url = $"https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={access_token}&type=jsapi"; //获取缓存中的值 var apiCache = CacheHelper.get <string>(key); //如果没有,则重新远程获取并加入缓存 if (string.IsNullOrEmpty(apiCache)) { //远程拉取字符串 var str = getFormWechatService(url); //反序列化 JsApiTicket ticket = JsonHelper.jsonToModel <JsApiTicket>(str); apiCache = ticket.ticket; //存入缓存,绝对过期时间 CacheHelper.add(key, apiCache, ticket.expires_in); } return(apiCache); }
public static string GetJsApiTicket() { if (_ticket == null || !_ticket.IsValid) { string url = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", GetAccessToken()); HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(url); HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); string content = reader.ReadToEnd(); DateTime now = DateTime.Now; var jobject = JObject.Parse(content); string ticket = jobject["ticket"].ToString(); int expires = Convert.ToInt32(jobject["expires_in"]); _ticket = new JsApiTicket { Ticket = ticket, ExpiresTime = now.AddSeconds(expires), }; } return(_ticket.Ticket); }
//jsapi_ticket public static string GetHsJsApiTicket(string accessToken) { JavaScriptSerializer js = new JavaScriptSerializer(); Wx_config Model = Wx_configService.GetWxconfigInfor("履职"); string tk = ""; if (Model != null)//更新操作 { if (Model.jsapi_ticket == "" || Model.jsapi_ticketTime.ToString() == "") { var url = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", accessToken); string ticketjson = SendGet(url); JsApiTicket t = js.Deserialize <JsApiTicket>(ticketjson); tk = t.ticket; Wx_configService.UpdateWxTicket(tk, "履职"); } else { DateTime date1 = Convert.ToDateTime(Model.jsapi_ticketTime.ToString()); DateTime date2 = System.DateTime.Now; TimeSpan timeSpan = date2 - date1; if (timeSpan.TotalMinutes > 60) { var url = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", accessToken); string ticketjson = SendGet(url); JsApiTicket t = js.Deserialize <JsApiTicket>(ticketjson); tk = t.ticket; Wx_configService.UpdateWxTicket(tk, "履职"); } else { tk = Model.jsapi_ticket.ToString(); } } } return(tk); }
public void ProcessRequest(HttpContext context) { if (GetQeuryString("para", context) == "jsapi") //获取js接口凭证 { try { //string token = w.Token();//w.mjuserid string resmsg = NetHelper.HttpRequest(AppConfig.TokenUrl, "", "GET", 2000, Encoding.UTF8, "application/json"); TokeRes toke = JsonHelper.DeserializeObject <TokeRes>(resmsg); string token = toke.Access_Token; string sj = ConvertDateTimeInt(DateTime.Now).ToString(); //时间戳 string sjm = Guid.NewGuid().ToString("d"); //随机码 string jsapimsg = NetHelper.HttpRequest(AppConfig.JsApiTokenUrl, "", "GET", 2000, Encoding.UTF8, "application/json"); JsApiTicket jat = JsonHelper.DeserializeObject <JsApiTicket>(jsapimsg); string ticket = jat.JsApi; // GetJSAPI_Ticket(token, m); //凭证 //WriteTxt("js注册:apiurl=" + context.Request.Params["apiurl"]); string dz = context.Server.UrlDecode(context.Request.Params["apiurl"]); //context.Request.Params["apiurl"];// string noncestr = "noncestr=" + sjm; string jsapi_ticket = "jsapi_ticket=" + ticket; string timestamp = "timestamp=" + sj; string url = "url=" + dz; //WriteTxt("js注册:url="+ dz); string[] ArrTmp = { noncestr, jsapi_ticket, timestamp, url }; Array.Sort(ArrTmp); //字典排序 string tmpStr = string.Join("&", ArrTmp); //WriteTxt("js注册:tmpStr=" + tmpStr); tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1"); tmpStr = tmpStr.ToLower(); if (ticket == "") { //WriteTxt("js注册:失败" ); context.Response.Write("{\"status\":\"" + -1 + "\"}"); } else { var re = new { state = 0, appId = AppConfig.WXAppId, timestamp = sj, nonceStr = sjm, signature = tmpStr, url = dz, link = (dz.IndexOf("&") == -1 ? dz : dz.Substring(0, dz.IndexOf("&"))), title = "", imgUrl = ConfigurationSettings.AppSettings["WebUrl"] + "/wechat/XYH_Coupon_H5/images/logo.jpg", desc = "" }; string ret = JsonConvert.SerializeObject(re); //WriteTxt("js注册:" + ret); context.Response.Write(ret); } } catch (Exception ex) { context.Response.Write(ex.Message + "," + ex.StackTrace); } } else if (GetQeuryString("para", context) == "upimg") //上传图片 { } else if (GetQeuryString("para", context) == "delete") //上传图片 { } else if (GetQeuryString("para", context) == "pv") { try { PVData pv = new PVData(); pv.DOMAIN = context.Request.Params[1]; pv.URL = context.Request.Params[2]; pv.TITLE = context.Request.Params[3]; pv.REFERRER = context.Request.Params[4]; pv.SH = context.Request.Params[5]; pv.SW = context.Request.Params[6]; pv.CD = context.Request.Params[7]; pv.ACCOUNT = context.Request.Params[9]; pv.LTIME = context.Request.Params[10]; mss.InsertPVData(pv); } catch { } } }