Пример #1
0
        public async Task <IActionResult> Refund(RefundViewModel viewModel)
        {
            var result = await _onlinePayment.RefundCompletelyAsync(viewModel.TrackingNumber);

            // Note: This is just for development and testing.
            // Don't show the actual result object to clients in production environment.
            // Instead, show only the important information such as IsSucceed, Tracking Number and Transaction Code.
            return(View("RefundResult", result));
        }
Пример #2
0
        public async Task <IActionResult> Refund(RefundViewModel viewModel)
        {
            var result = await _onlinePayment.RefundCompletelyAsync(viewModel.TrackingNumber);

            return(View("RefundResult", result));
        }
Пример #3
0
        public async Task <IActionResult> RefundSend(RefundRequestDto refundRequestDto)
        {
            var model = new GateApiReturn <RefundResponseDto>
            {
                Status = true
            };
            //Error
            var factorFromRepo = await _dbFinancial.FactorRepository.GetByIdAsync(refundRequestDto.Token);

            if (factorFromRepo == null)
            {
                errorModel.Messages.Clear();
                errorModel.Messages = new string[] { "تراکنشی با این مشخصات یافت نشد" };
                return(BadRequest(errorModel));
            }
            if (factorFromRepo.DateModified.AddMinutes(20) < DateTime.Now)
            {
                errorModel.Messages.Clear();
                errorModel.Messages = new string[] { "زمان استرداد تراکنش شما گذشته است" };
                return(BadRequest(errorModel));
            }
            if (factorFromRepo.IsAlreadyVerified)
            {
                errorModel.Messages.Clear();
                errorModel.Messages = new string[] { "این تراکنش قبلا بررسی شده است" };
                return(BadRequest(errorModel));
            }
            var gateFromRepo = (await _db._GateRepository.GetAllAsync(p => p.Id == refundRequestDto.Api, null, "Wallet")).SingleOrDefault();

            if (gateFromRepo == null)
            {
                errorModel.Messages.Clear();
                errorModel.Messages = new string[] { "Api درگاه معتبر نمیباشد" };
                return(BadRequest(errorModel));
            }
            //var userDocuments = await _db.DocumentRepository
            //    .GetManyAsync(p => p.Approve == 1 && p.UserId == gateFromRepo.Wallet.UserId, null, "");
            //if (!userDocuments.Any())
            //{
            //    errorModel.Messages.Clear();
            //    errorModel.Messages = new string[] { "مدارک کاربر صاحب درگاه تکمیل نمیباشد" };
            //    return BadRequest(errorModel);
            //}
            if (!gateFromRepo.IsActive)
            {
                errorModel.Messages.Clear();
                errorModel.Messages = new string[] { "این درگاه غیر فعال میباشد . درصورت نیاز با پشتیبانی در تماس باید" };
                return(BadRequest(errorModel));
            }
            if (gateFromRepo.IsIp)
            {
                var currentIp     = HttpContext.Connection.RemoteIpAddress.ToString(); //::1
                var gateWebsiteIp = await _utilities.GetDomainIpAsync(gateFromRepo.WebsiteUrl);

                if (currentIp != gateWebsiteIp)
                {
                    errorModel.Messages.Clear();
                    errorModel.Messages = new string[] { "آی پی وبسایت درخواست دهنده پرداخت معبتر نمیباشد" };
                    return(BadRequest(errorModel));
                }
            }


            //Refund
            var trackingNumber = Convert.ToInt64(factorFromRepo.RefBank);
            var refundResult   = await _onlinePayment.RefundCompletelyAsync(trackingNumber);

            if (refundResult.IsSucceed)
            {
                factorFromRepo.Status            = false;
                factorFromRepo.IsAlreadyVerified = true;
                factorFromRepo.DateModified      = DateTime.Now;
                factorFromRepo.Message           = "تراکنش انجام شده و مبلغ استرداد شده است";
                _dbFinancial.FactorRepository.Update(factorFromRepo);
                await _dbFinancial.SaveAcync();

                model.Messages.Clear();
                model.Messages = new string[] { "مبلغ تراکنش استرداد شد" };
                model.Result   = new RefundResponseDto
                {
                    Amount       = factorFromRepo.EndPrice,
                    FactorNumber = factorFromRepo.FactorNumber,
                    RefBank      = "MPC-" + factorFromRepo.RefBank,
                    Mobile       = factorFromRepo.Mobile,
                    Email        = factorFromRepo.Email,
                    Description  = factorFromRepo.Description,
                    CardNumber   = factorFromRepo.ValidCardNumber
                };
                return(Ok(model));
            }
            else
            {
                factorFromRepo.IsAlreadyVerified = true;
                factorFromRepo.DateModified      = DateTime.Now;
                factorFromRepo.Message           = refundResult.Message;
                _dbFinancial.FactorRepository.Update(factorFromRepo);
                await _dbFinancial.SaveAcync();


                errorModel.Messages.Clear();
                errorModel.Messages = new string[] { refundResult.Message };
                return(BadRequest(errorModel));
            }
        }