public async Task RefundAsync(RefundRequestDto input) { var productOrder = await Repository.Include(x => x.OrderItems).FirstOrDefaultAsync(x => x.Id == input.OrderId); if (productOrder == null) { throw new UserFriendlyException("NotFind"); } await _mediator.Publish(new ProductOrderRefundEvent(productOrder, input.RefundPrice, input.Reason)); }
public ActionResult RefundRequest() { var StudentId = WebUserInfo.UserId; var courses = _db.Set <Student>().Include("CoursesJoinStudents.Course.Term").First(s => s.Id == StudentId).CoursesJoinStudents.ToList(); var refundRequest = new RefundRequestDto { Courses = courses.Select(c => new SelectListItem { Text = $@"{c.Course.Name} ({c.Course.Term.Name})", Value = c.Course.Id.ToString() }) }; return(View(refundRequest)); }
/// <summary> /// Refund an Ogone Payment /// </summary> /// <param name="orderReference">Order Reference</param> /// <param name="sequence">Transaction Sequence</param> /// <param name="amount">Amount to refund (if partial refund)</param> /// <returns>Success/Failure</returns> public bool RefundPayment(string orderReference, int? sequence = null, decimal? amount = null) { Logger.LogInfo("RefundPayment: Order Reference {0} | Sequence {1} | Amount {2}", null, orderReference, sequence.HasValue ? sequence.Value : -1, amount.HasValue ? amount.Value : -1); var request = new RefundRequestDto { Amount = amount.HasValue ? (long) (amount*100) : (long?) null, OrderReference = orderReference, Sequence = sequence }; var result = CallPostEndPoint<RefundResponseDto, RefundRequestDto>(RefundPaymentUrl, request); return result.IsSuccess; }
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)); } }