public async Task <Guid> AddDonation(LiqPayCheckoutDto liqPayCheckoutDto) { var liqPayData = new LiqPayData(liqPayCheckoutDto.Data); var liqPaySignature = new LiqPaySignature(liqPayData, _liqPayKeys.PrivateKey); if (!await liqPaySignature.Validate(liqPayCheckoutDto.Signature)) { throw new InvalidArgumentException(nameof(liqPayCheckoutDto.Signature), "Invalid signature"); } var donation = liqPayData.Donation; var commissionModel = liqPayData.Commission; donation.Amount -= commissionModel.ReceiverCommission; donation.ProjectId = liqPayCheckoutDto.ProjectId; donation.SocietyId = liqPayCheckoutDto.SocietyId; donation.DonatorId = liqPayCheckoutDto.DonatorId; _unitOfWork.Repository <Donation>().Add(donation); await _unitOfWork.SaveChangesAsync(); return(donation.Id); }
public static ILiqPayData CreateLiqPayData(LiqPayPostInfo liqPayInfo, string publicKey, string serverUrl) { ILiqPayData liqPayData; var orderId = Guid.NewGuid().ToString(); var subStartDate = DateTime.Now.ToString("yyyy-MM-dd") + " " + DateTime.Now.ToString("hh:mm:ss"); if (liqPayInfo.IsSubscribe) { liqPayData = new LiqPaySubData() { public_key = publicKey, version = "3", action = "subscribe", amount = liqPayInfo.Amount, currency = "UAH", description = ConfigurationManager.AppSettings["description"], order_id = orderId, subscribe = liqPayInfo.Amount, subscribe_date_start = subStartDate, subscribe_periodicity = ConfigurationManager.AppSettings["subscribe_periodicity"], result_url = ConfigurationManager.AppSettings["result_url"], server_url = serverUrl, sandbox = int.Parse(ConfigurationManager.AppSettings["test_mode"]) }; } else { liqPayData = new LiqPayData() { public_key = publicKey, version = "3", action = "pay", amount = liqPayInfo.Amount, currency = "UAH", description = ConfigurationManager.AppSettings["description"], order_id = orderId, result_url = ConfigurationManager.AppSettings["result_url"], server_url = serverUrl, sandbox = int.Parse(ConfigurationManager.AppSettings["test_mode"]) }; } return(liqPayData); }
public async Task <LiqPayCheckoutDto> GetLiqPayCheckoutModel( LiqPayCheckoutModelRequestDto liqPayCheckoutModelRequest) { var mapper = new MapperConfiguration(mapOpts => { mapOpts.CreateMap <LiqPayCheckoutModelRequestDto, LiqPayCheckout>() .ForMember(c => c.Amount, opts => opts.MapFrom(dto => dto.DonationAmount)); }).CreateMapper(); var liqPayCheckout = mapper.Map <LiqPayCheckout>(liqPayCheckoutModelRequest); liqPayCheckout.PublicKey = _liqPayKeys.PublicKey; var liqPayData = new LiqPayData(liqPayCheckout); var liqPaySignature = new LiqPaySignature(liqPayData, _liqPayKeys.PrivateKey); return(new LiqPayCheckoutDto() { Data = liqPayData.Base64Data, Signature = await liqPaySignature.GetSignature() }); }
public async Task TopUpBalance(LiqPayCheckoutDto liqPayCheckoutDto) { var liqPayData = new LiqPayData(liqPayCheckoutDto.Data); var liqPaySignature = new LiqPaySignature(liqPayData, _liqPayInfo.PrivateKey); if (!await liqPaySignature.Validate(liqPayCheckoutDto.Signature)) { throw new InvalidArgumentException(nameof(liqPayCheckoutDto.Signature), "Invalid signature"); } var user = await _unitOfWork.Repository <UserDetails>() .Get(i => i.UserDetailsId == liqPayCheckoutDto.MemberId); if (user == null) { throw new NotFoundException($"User with id {liqPayCheckoutDto.MemberId}"); } var donation = liqPayData.Donation; var commissionModel = liqPayData.Commission; donation.Amount -= commissionModel.ReceiverCommission; user.Balance += donation.Amount; var paymentHistory = new PaymentHistory() { Description = PaymentDescription.TopUp, Saldo = donation.Amount, UserId = (Guid)liqPayCheckoutDto.MemberId, CurrentBalance = user.Balance }; _unitOfWork.Repository <UserDetails>().Update(user); _unitOfWork.Repository <PaymentHistory>().Add(paymentHistory); await _unitOfWork.SaveChangesAsync(); }