Example #1
0
        public static bool IsAuthorized(HttpContextBase context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var user = context.User as ClaimsPrincipal;

            if (user?.Identity == null)
            {
                return(false);
            }

            long   loginId  = context.ReadClaim <long>("loginid");
            long   userId   = context.ReadClaim <int>("userid");
            long   officeId = context.ReadClaim <int>("officeid");
            string email    = context.ReadClaim <string>(ClaimTypes.Email);

            var    expriesOn   = new DateTime(context.ReadClaim <long>("exp"), DateTimeKind.Utc);
            string ipAddress   = context.GetClientIpAddress();
            string userAgent   = context.GetUserAgent();
            string clientToken = context.Request.GetClientToken();


            if (string.IsNullOrWhiteSpace(clientToken))
            {
                return(false);
            }

            if (loginId <= 0)
            {
                Log.Warning(
                    "Invalid login claims supplied. Access was denied to user {userId}/{email} for officeId {officeId} having the loginId {loginId}. Token: {clientToken}.",
                    userId, email, officeId, loginId, clientToken);
                Thread.Sleep(new Random().Next(1, 60) * 1000);
                return(false);
            }

            if (expriesOn <= DateTimeOffset.UtcNow)
            {
                Log.Debug(
                    "Token expired. Access was denied to user {userId}/{email} for officeId {officeId} having the loginId {loginId}. Token: {clientToken}.",
                    userId, email, officeId, loginId, clientToken);
                return(false);
            }


            bool isValid = AccessTokens.IsValid(clientToken, ipAddress, userAgent);

            if (expriesOn <= DateTimeOffset.UtcNow)
            {
                Log.Debug(
                    "Token invalid. Access was denied to user {userId}/{email} for officeId {officeId} having the loginId {loginId}. Token: {clientToken}.",
                    userId, email, officeId, loginId, clientToken);
                return(false);
            }

            return(isValid);
        }
        public IHttpActionResult DoRecharge(dynamic model)
        {
            decimal amount = model.Amount; //Convert.ToDecimal(model.Amout);

            log.Log(LoggerLevels.Debug,
                    "进入API[DoRecharge]amount:" + amount + ", model:" + JsonConvert.SerializeObject(model));

            if (amount <= 0)
            {
                return(BadRequest("充值金额必须大于0!"));
            }
            HttpContextBase context = (HttpContextBase)Request.Properties["MS_HttpContext"];//获取传统context

            //记录充值日志
            using (var payLogDo = new PayLogDO(TenantId, WeiChatApplicationContext.Current.WeiChatUser.OpenId, context != null ? context.GetClientIpAddress() : null, db))
            {
                payLogDo.AddRechargeLog(amount, paymentInterfaceLog: null);
            }
            return(Ok());
        }
        public IHttpActionResult Add([FromBody] dynamic Json)
        {
            var ids = string.Empty;

            if (null == Json)
            {
                return(Ok(new { success = false, message = "产品信息不存在" }));
            }

            try
            {
                Guid            AddressId = Guid.Parse(Convert.ToString(Json.AddressId));
                string          leave     = Convert.ToString(Json.Remark);
                Guid            FreiId    = Guid.Parse(Convert.ToString(Json.YunFei));
                var             carts     = (JArray)JsonConvert.DeserializeObject(Convert.ToString(Json.Products));
                var             FreiPrice = db.Logistics_FreightTemplates.Find(FreiId).Price;
                HttpContextBase context   = (HttpContextBase)Request.Properties["MS_HttpContext"];//获取传统context
                #region 订单信息

                var order = new Order_Info
                {
                    Id         = Guid.NewGuid(),
                    Code       = PayUtil.GenerateOutTradeNo(),
                    OpenId     = WeiChatApplicationContext.Current.WeiChatUser.OpenId,
                    TotalPrice = 0,
                    Remark     = "",
                    //User = WeiChatApplicationContext.Current.WeiChatUser,
                    ThirdPayType    = EnumThirdPayType.WX,
                    DealOn          = DateTime.Now,
                    PaymentOn       = (DateTime)SqlDateTime.MinValue,
                    ShippingOn      = (DateTime)SqlDateTime.MinValue,
                    ReceiptOn       = (DateTime)SqlDateTime.MinValue,
                    Shipping        = FreiPrice,
                    Leave           = leave,
                    RejectReason    = string.Empty,
                    State           = EnumOrderStatus.Obligation,
                    CreateTime      = DateTime.Now,
                    UpdateTime      = DateTime.Now,
                    TenantId        = TenantId,
                    ClientIpAddress = context != null?context.GetClientIpAddress() : null
                };

                #endregion

                #region 订单产品

                var by       = false;
                var shipping = new List <decimal>();
                foreach (var cart in carts)
                {
                    var cartID   = Guid.Parse(cart.ToString());
                    var cartTemp = db.Cart_Infos.FirstOrDefault(o => o.Id == cartID);

                    var product = (from pro in db.Product_Infos
                                   join photo in db.Site_Photos on pro.Id equals photo.GalleryId
                                   where pro.Id == cartTemp.ProductID
                                   select new { pro.Name, photo.Url, pro.Id }).FirstOrDefault();

                    //db.Product_Infos.FirstOrDefault(o => o.Id == cartTemp.ProductID);
                    log.Log(LoggerLevels.Debug, "product:" + JsonConvert.SerializeObject(product));
                    var package = db.Product_ProductAttributes.FirstOrDefault(o => o.AttributeId == cartTemp.PackageID);
                    log.Log(LoggerLevels.Debug, "package:" + JsonConvert.SerializeObject(package));
                    log.Log(LoggerLevels.Debug, "cartTemp:" + JsonConvert.SerializeObject(cartTemp));
                    if (null != cartTemp)
                    {
                        var orderDetail = new Order_Detail
                        {
                            Id           = Guid.NewGuid(),
                            OrderID      = order.Id,
                            ProductName  = product.Name,
                            ProductImage = product.Url,
                            ProductID    = product.Id,
                            PackageID    = package.Id,
                            Price        = package.AttributePrice,
                            Quantity     = cartTemp.Quantity,
                            OpenId       = order.OpenId,
                            CreateTime   = DateTime.Now,
                            TenantId     = TenantId
                        };
                        db.Order_Details.Add(orderDetail);
                        //清除购物车
                        db.Cart_Infos.Remove(cartTemp);
                        //计算费用
                        order.TotalPrice += orderDetail.Price * orderDetail.Quantity;
                    }
                }

                #endregion

                #region 收货

                var address = db.User_Addresses.FirstOrDefault(o => o.Id == AddressId);
                log.Log(LoggerLevels.Debug, "address:" + JsonConvert.SerializeObject(address));
                var orderLogistics = new Order_Logistics
                {
                    Id           = Guid.NewGuid(),
                    OrderID      = order.Id,
                    Consignee    = address.Name,
                    Province     = address.Province,
                    City         = address.City,
                    Area         = address.District,
                    Address      = address.Street,
                    Mobile       = address.PhoneNumber,
                    Logistics    = string.Empty,
                    ShippingCode = string.Empty,
                    OpenId       = order.OpenId,
                    CreateTime   = DateTime.Now,
                    TenantId     = TenantId
                };
                db.Order_Logistics.Add(orderLogistics);

                #endregion

                if (db.Order_Infos.Any(o => o.Code == order.Code))
                {
                    order.Code = PayUtil.GenerateOutTradeNo();
                }

                db.Order_Infos.Add(order);
                db.SaveChanges();
                return(Ok(order.Id));
            }
            catch (Exception ex)
            {
                log.Log(LoggerLevels.Error, "Order/Add:" + ex.Message);
                return(BadRequest("系统异常,请联系管理员!"));
            }
        }