Ejemplo n.º 1
0
        public string GetTicket(string appid, string appsecret)
        {
            var model = DbFactory.Default.Get <WeiXinBasicInfo>().FirstOrDefault();

            if (model != null && model.TicketOutTime > DateTime.Now && !string.IsNullOrEmpty(model.Ticket))
            {
                return(model.Ticket);
            }

            lock (_locker)
            {
                model = DbFactory.Default.Get <WeiXinBasicInfo>().FirstOrDefault();
                if (model != null && model.TicketOutTime > DateTime.Now && !string.IsNullOrEmpty(model.Ticket))
                {
                    return(model.Ticket);
                }

                if (model == null)
                {
                    model = new WeiXinBasicInfo();
                }

                var ticketRequest = new Senparc.Weixin.MP.Entities.JsApiTicketResult();
                ticketRequest.errcode = Senparc.Weixin.ReturnCode.系统繁忙此时请开发者稍候再试;
                try
                {
                    var accessToken = this.TryGetToken(appid, appsecret);
                    model.AccessToken = accessToken;
                    ticketRequest     = CommonApi.GetTicket(accessToken);
                }
                catch (Exception e)
                {
                    Log.Error("请求Ticket出错,强制刷新acess_token", e);
                    var accessToken = this.TryGetToken(appid, appsecret, true);
                    model.AccessToken = accessToken;
                    ticketRequest     = CommonApi.GetTicket(accessToken);
                }
                if (ticketRequest.errcode == Senparc.Weixin.ReturnCode.请求成功 && !string.IsNullOrEmpty(ticketRequest.ticket))
                {
                    if (ticketRequest.expires_in > 3600)
                    {
                        ticketRequest.expires_in = 3600;
                    }
                    model.AppId         = appid;
                    model.TicketOutTime = DateTime.Now.AddSeconds(ticketRequest.expires_in);
                    model.Ticket        = ticketRequest.ticket;

                    DbFactory.Default.Save(model);

                    return(model.Ticket);
                }
                else
                {
                    throw new HimallException("请求微信接口出错");
                }
            }
        }
Ejemplo n.º 2
0
        public string GetTicket(string appid, string appsecret)
        {
            int             num             = context.WeiXinBasicInfo.ToList().Count();
            WeiXinBasicInfo weiXinBasicInfo = null;

            if (num != 0)
            {
                weiXinBasicInfo = context.WeiXinBasicInfo.FirstOrDefault();
            }
            else
            {
                WeiXinBasicInfo weiXinBasicInfo1 = new WeiXinBasicInfo()
                {
                    TicketOutTime = DateTime.Now,
                    Ticket        = ""
                };
                weiXinBasicInfo             = weiXinBasicInfo1;
                weiXinBasicInfo.AppId       = "";
                weiXinBasicInfo.AccessToken = "";
                weiXinBasicInfo             = context.WeiXinBasicInfo.Add(weiXinBasicInfo);
                context.SaveChanges();
            }
            if (weiXinBasicInfo.TicketOutTime > DateTime.Now)
            {
                return(weiXinBasicInfo.Ticket);
            }
            JsApiTicketResult jsApiTicketResult = new JsApiTicketResult();

            try
            {
                string str = CommonApi.GetToken(appid, appsecret).access_token;
                weiXinBasicInfo.AccessToken = str;
                jsApiTicketResult           = CommonApi.GetTicket(str, "jsapi");
            }
            catch (Exception exception1)
            {
                Exception exception = exception1;
                if (jsApiTicketResult.errcode == ReturnCode.获取access_token时AppSecret错误或者access_token无效)
                {
                    Log.Info("请求Ticket出错,强制刷新acess_token", exception);
                    string str1 = CommonApi.GetToken(appid, appsecret).access_token;

                    weiXinBasicInfo.AccessToken = str1;
                    jsApiTicketResult           = CommonApi.GetTicket(str1, "jsapi");
                }
            }
            if (jsApiTicketResult.errcode != ReturnCode.请求成功)
            {
                throw new HimallException("请求微信接口出错");
            }
            if (jsApiTicketResult.expires_in > 3600)
            {
                jsApiTicketResult.expires_in = 3600;
            }
            weiXinBasicInfo.AppId = appid;
            DateTime now = DateTime.Now;

            weiXinBasicInfo.TicketOutTime = now.AddSeconds(jsApiTicketResult.expires_in);
            weiXinBasicInfo.Ticket        = jsApiTicketResult.ticket;
            try
            {
                context.Configuration.ValidateOnSaveEnabled = false;
                context.SaveChanges();
                context.Configuration.ValidateOnSaveEnabled = true;
            }
            catch (Exception exception3)
            {
                Exception exception2 = exception3;
                Log.Info("保存失败", (exception2.InnerException != null ? exception2.InnerException : exception2));
            }
            return(weiXinBasicInfo.Ticket);
        }