public async Task <int> CreatePayment(int orderId)
        {
            var model = await _shopOrderRepository.GetByIdAsync(orderId);

            var items = await this.Entities.Where(x => x.ShopOrderId == orderId).ToListAsync();

            if (items != null && items.Count > 0)
            {
                return(items.Count);
            }

            var count = Math.Ceiling((decimal)model.PaymentAmount / 50000000);

            var adds = new List <ShopOrderPayment>();

            if (count == 1)
            {
                adds.Add(new ShopOrderPayment()
                {
                    ShopOrderId   = orderId,
                    IsSuccess     = false,
                    PaymentAmount = model.PaymentAmount,
                    PaymentDate   = null,
                    IsOnlinePay   = true
                });
            }
            else
            {
                var payment = model.PaymentAmount;
                for (int i = 0; i < count; i++)
                {
                    adds.Add(new ShopOrderPayment()
                    {
                        ShopOrderId   = orderId,
                        IsSuccess     = false,
                        PaymentAmount = payment > 50000000 ? 50000000 : payment,
                        PaymentDate   = null,
                        IsOnlinePay   = true
                    });

                    payment = payment - 50000000;
                }
            }

            await AddRangeAsync(adds);

            return((int)count);
        }
Exemplo n.º 2
0
        public async Task <int> CreatePayment(int orderId)
        {
            var model = await _shopOrderRepository.GetByIdAsync(orderId);

            var count = Math.Ceiling((decimal)model.PaymentAmount / 50000000);

            var adds = new List <ShopOrderPayment>();

            if (count == 1)
            {
                adds.Add(new ShopOrderPayment()
                {
                    ShopOrderId   = orderId,
                    IsSuccess     = false,
                    PaymentAmount = model.PaymentAmount,
                    PaymentDate   = null,
                });
            }
            else
            {
                var payment = model.PaymentAmount;
                for (int i = 0; i < count; i++)
                {
                    adds.Add(new ShopOrderPayment()
                    {
                        ShopOrderId   = orderId,
                        IsSuccess     = false,
                        PaymentAmount = payment > 50000000 ? 50000000 : payment,
                        PaymentDate   = null,
                    });

                    payment = payment - 50000000;
                }
            }

            await AddRangeAsync(adds);

            return((int)count);
        }
Exemplo n.º 3
0
        public async Task <IActionResult> OrderDetail(int id, int userId)
        {
            var model = _shopProductRepository.GetList(a => a.ShopOrderId == id, includes: "Product");

            // اطلاعات فاکتور
            var info = await _shopOrderRepository.GetByIdAsync(id);

            // اطلاعات کاربر
            ViewBag.UserInfo = await _userRepository.GetByConditionAsync(a => a.Id == info.UserId);

            // اطلاعات آدرس کاربر
            //ViewBag.UserAddress = await _userAddressRepository.GetByConditionAsync(a => a.UserId == a.UserId);
            ViewBag.Order = info;

            // روند نمایی وضعیت فاکتور
            ViewBag.shopOrderStatuses = await _shopOrderStatusRepository.GetItemsByOrderId(id);

            ViewBag.UserAddress = await _userAddressRepository.GetByConditionAsync(a => a.ShopOrderId == info.Id);

            ViewBag.Order = info;
            ViewBag.Unit  = await _productUnitRepository.GetListAsync();

            return(View(model));
        }
        public async Task <IActionResult> RequestBuilder(int id)
        {
            if (!User.Identity.IsAuthenticated)
            {
                return(RedirectToAction("Login", "Account"));
            }

            var factorInfo = await _shopOrderRepository.GetByIdAsync(id);

            #region BankDependency

            if (factorInfo == null)
            {
                TempData.AddResult(SweetAlertExtenstion.Error("اطلاعات سبد خریدی با این عنوان یافت نشد"));
                return(RedirectToAction("Index", "ShopProductController"));
            }

            // شماره خرید
            var OrderId = new Random().Next(1000, int.MaxValue).ToString();

            // رمز گذاری اطلاعات
            var dataBytes = Encoding.UTF8.GetBytes(string.Format("{0};{1};{2}", _bankConfig.TerminalId, OrderId, 1000));

            var symmetric = SymmetricAlgorithm.Create("TripleDes");
            symmetric.Mode    = CipherMode.ECB;
            symmetric.Padding = PaddingMode.PKCS7;

            // رمز گذاری گلید پایانه
            var encryptor = symmetric.CreateEncryptor(Convert.FromBase64String(_bankConfig.MerchantKey), new byte[8]);
            var SignData  = Convert.ToBase64String(encryptor.TransformFinalBlock(dataBytes, 0, dataBytes.Length));

            // ادرس بازگشت از درگاه
            var ReturnUrl = string.Format(_bankConfig.ReturnUrl);

            // ادرس وب سرویس درگاه
            var ipgUri = string.Format("{0}/api/v0/Request/PaymentRequest", _bankConfig.PurchasePage);

            #endregion

            #region Informations

            // آماده سازی اطلاعات برای ا
            var data = new
            {
                _bankConfig.TerminalId,
                _bankConfig.MerchantId,
                Amount = 1000,
                SignData,
                _bankConfig.ReturnUrl,
                LocalDateTime = DateTime.Now,
                OrderId,
                //MultiplexingData = request.MultiplexingData
            };

            #endregion

            #region RequestBuild

            var res = ManageBankService.CallApi <BankResultViewModel>(ipgUri, data);
            res.Wait();

            #endregion

            #region Request Result

            if (res != null && res.Result != null)
            {
                if (res.Result.ResCode == "0")
                {
                    factorInfo.OrderId = OrderId;

                    await _usersPaymentRepository.MapAddAsync(SetValue(res.Result.Token));

                    await _shopOrderRepository.UpdateAsync(factorInfo);

                    Response.Redirect(string.Format("{0}/Purchase/Index?token={1}", _bankConfig.PurchasePage, res.Result.Token));
                }
                ViewBag.Message = res.Result.Description;
                return(View());
            }

            #endregion

            return(View());

            #region LocalMethods

            AddUserPaymentViewModel SetValue(string token)
            {
                return(new AddUserPaymentViewModel()
                {
                    Amount = data.Amount,
                    DateTime = data.LocalDateTime,
                    OrderId = data.OrderId,
                    Token = token,
                    UserId = UserId,
                    ShopOrderId = id
                });
            }

            #endregion
        }