Пример #1
0
        public async Task <bool> ConcludePaystack(PaystackTransactionData data)
        {
            PaymentChannel channel = await DataContext.Store.GetOneAsync <PaymentChannel>(p => p.Type == ChannelType.Paystack);

            if (!decimal.TryParse(data.Amount, out decimal transactionAmount))
            {
                return(false);
            }

            if (!Guid.TryParse((string)data.Metadata["walletId"], out Guid walletId))
            {
                return(false);
            }
            if (!Guid.TryParse(data.Reference, out Guid transactionId))
            {
                return(false);
            }


            User   platformAccount = DataContext.PlatformAccount;
            Wallet wallet          = await DataContext.Store.GetByIdAsync <Wallet>(walletId);

            decimal amount = transactionAmount / channel.ConversionRate;

            await CreateTransaction(wallet, amount, TransactionType.Deposit, ChannelType.Paystack);

            if (data.Authorization.Reusable && string.IsNullOrWhiteSpace(wallet.PaystackAuthorization))
            {
                wallet.PaystackAuthorization = data.Authorization.AuthorizationCode;
                await DataContext.Store.UpdateOneAsync(wallet.User);
            }

            return(true);
        }
Пример #2
0
        public async Task <bool> ConcludePaystack(PaystackTransactionData data, PaymentType type, UserTransactionMetadata meta = null)
        {
            if (type != PaymentType.Deposit && type != PaymentType.Withdrawal && type != PaymentType.Direct)
            {
                return(false);
            }

            PaymentChannel channel = await DataContext.Store
                                     .GetOneAsync <PaymentChannel, int>(p => p.Type == ChannelType.Paystack);

            if (!decimal.TryParse(data.Amount, out decimal transactionAmount))
            {
                return(false);
            }

            if (!Guid.TryParse((string)data.Metadata["walletId"], out Guid walletId))
            {
                return(false);
            }
            if (!Guid.TryParse(data.Reference, out Guid transactionId))
            {
                return(false);
            }

            Wallet wallet = await DataContext.Store.GetByIdAsync <Wallet>(walletId);

            decimal amount = transactionAmount / channel.ConversionRate;

            await CreateTransaction(wallet, amount, type, ChannelType.Paystack, Status.Approved, meta);

            if (data.Authorization.Reusable && string.IsNullOrWhiteSpace(wallet.PaystackAuthorization))
            {
                wallet.PaystackAuthorization = data.Authorization.AuthorizationCode;
                await DataContext.Store.UpdateOneAsync(wallet.User);
            }

            return(true);
        }