Beispiel #1
0
        public async Task <List <TransactionAPIModel> > GetTransactions(Guid merchantId)
        {
            List <Transaction> transactions = new List <Transaction>();

            using (CheckOutPaymentGatewayEntities db = new CheckOutPaymentGatewayEntities())
            {
                transactions = await db.Transactions.Where(x => x.MerchantId == merchantId).ToListAsync();
            }

            return(transactions.Select(x => new TransactionAPIModel
            {
                Amount = x.Amount,
                CardExpiryDate = x.CardExpiryDate,
                MaskedCardNumber = PrepareMask(EncryDecryMechanism.DecryptData(x.CardNumber, secretKey)),
                CardCurrency = x.CardCurrency,
                TransactionStatus = x.TransactionStatus,
                TransactionDateTime = x.TransactionDateTime
            }).ToList());
        }
Beispiel #2
0
        public async Task <ResponseAPIModel> ProcessPayment(ProcessPaymentAPIModel paymentModel)
        {
            //Serilog implementation
            Log.Logger = new LoggerConfiguration()
                         .WriteTo.Console()
                         .WriteTo.Seq("http://localhost:5341")
                         .CreateLogger();

            logger.Info("Starting Process Payment...");
            Log.Information("Starting Process Payment...");
            logger.Info("Validating process payment model");
            Log.Information("Validating process payment model");

            if (paymentModel != null && validator.ValidatePaymentModel(paymentModel, logger))
            {
                logger.Info("Valid payment model");
                Log.Information("Valid payment model");

                ProcessPaymentModel processModel = BuildPaymentModel(paymentModel);

                //contact and expose data to external bank api
                ExternalBankExpo contactExternalBank = new ExternalBankExpo();
                logger.Info("Contacting external bank endpoints");
                Log.Information("Contacting external bank endpoints");

                try
                {
                    var response = contactExternalBank.ProcessPayment(processModel);

                    if (response != null && response.ResponseStatus == States.Success.ToString())
                    {
                        logger.Info("Success in contacting external bank endpoints");
                        Log.Information("Success in contacting external bank endpoints");


                        //build transaction model and save data to db
                        Transaction transaction = BuildTransactionModel(processModel, response);

                        logger.Info("Attempting to save transaction");
                        Log.Information("Attempting to save transaction");

                        try
                        {
                            using (CheckOutPaymentGatewayEntities db = new CheckOutPaymentGatewayEntities())
                            {
                                db.Transactions.Add(transaction);
                                await db.SaveChangesAsync();
                            }

                            if (transaction.TransactionStatus == States.Success.ToString())
                            {
                                logger.Info("Transaction saved successfully");
                            }
                            else
                            {
                                logger.Error("Transaction failed");
                            }

                            return(transaction.TransactionStatus == States.Success.ToString() ? new ResponseAPIModel(States.Success)
                                : new ResponseAPIModel(States.Error, "Cannot execute transaction"));
                        }
                        catch (Exception ee)
                        {
                            logger.Error("Failed to contact perform transaction - " + ee.ToString());
                            Log.Information("Failed to contact perform transaction - " + ee.ToString());
                        }
                    }
                    else
                    {
                        logger.Error("Failed to contact external bank endpoints");
                        Log.Information("Failed to contact external bank endpoints");

                        return(new ResponseAPIModel(States.Error, "Cannot contact and process payment to external bank"));
                    }
                }
                catch (Exception e)
                {
                    logger.Error("Failed to contact external bank endpoints - " + e.ToString());
                    Log.Information("Failed to contact external bank endpoints - " + e.ToString());

                    return(new ResponseAPIModel(States.Error, "Cannot contact and process payment to external bank"));
                }
            }
            logger.Error("Invalid payment model");
            Log.CloseAndFlush();
            return(new ResponseAPIModel(States.Error, "Invalid payment api model"));
        }