/// <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);
                }
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #7
0
        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);
            }
        }
Example #9
0
        /// <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);
        }
Example #10
0
        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);
        }
Example #12
0
        /// <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);
        }
Example #13
0
        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);
        }
Example #14
0
        //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);
        }
Example #15
0
        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 { }
            }
        }