Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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()
            });
        }
Пример #4
0
        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();
        }