Beispiel #1
0
        static void Main(string[] args)
        {
            if (args.Any() && args[0] == "reinstall")
            {
                var context = new FreepayMockContext();
                if (context.Database.Exists())
                {
                    context.Database.Delete();
                }

                context.Database.CreateIfNotExists();

                var sql = @"
SET IDENTITY_INSERT Merchants ON; 
INSERT INTO Merchants(MerchantId, Password) values(54321, 'passsword');
SET IDENTITY_INSERT Merchants OFF;";

                context.Database.ExecuteSqlCommand(sql);
                context.SaveChanges();
            }

            var port = 2020;

            using (WebApp.Start <Startup>($"http://+:{port}"))
            {
                Console.ReadLine();
            }
        }
        public WebServicesModule(FreepayMockContext db)
        {
            Get["/webservices/public/subscriptionmanager.asmx/AuthorizeSubscription3"] = parameters =>
            {
                int    subscriptionId = parameters.subscriptionId;
                string password       = parameters.password;
                int    amount         = parameters.amount;
                string orderId        = parameters.orderId;
                int    currencyAsInt  = parameters.currencyAsInt;

                var merchant = db.Merchants.FirstOrDefault(x => x.Password == password);

                if (merchant == null)
                {
                    return(HttpStatusCode.InternalServerError);
                }

                var subscription = db.Subscriptions.FirstOrDefault(x => x.SubscriptionId == subscriptionId);

                if (subscription == null)
                {
                    return(HttpStatusCode.InternalServerError);
                }

                var transaction = new TransactionRecord();
                transaction.SubscriptionId = subscriptionId;
                transaction.Amount         = amount;
                transaction.OrderId        = orderId;
                transaction.CurrencyAsInt  = currencyAsInt;
                transaction.DateCreated    = DateTime.Now;
                return("OK");
            };

            Get["/webservices/public/subscriptionmanager.asmx/QuerySubscription"] = parameters =>
            {
                int    subscriptionId = parameters.subscriptionId;
                string password       = parameters.password;

                var merchant = db.Merchants.FirstOrDefault(x => x.Password == password);

                if (merchant == null)
                {
                    return(HttpStatusCode.InternalServerError);
                }

                var subscription = db.Subscriptions.FirstOrDefault(x => x.SubscriptionId == subscriptionId);

                if (subscription == null)
                {
                    return(HttpStatusCode.InternalServerError);
                }

                var model = new SubscriptionView();
                model.Acquirer       = "NetsTeller";
                model.CardType       = subscription.CardType;
                model.Currency       = subscription.Currency;
                model.DateCreated    = subscription.DateCreated;
                model.ExpiryDate     = subscription.ExpiryDate;
                model.MerchantID     = merchant.MerchantId;
                model.MerchantNumber = merchant.MerchantId;
                model.OrderID        = model.OrderID;
                model.PANHash        = "";
                model.SourceIP       = subscription.SourceIP;
                model.SubscriptionID = subscriptionId;
                return(Response.AsXml(model));
            };


            //public static string GetApproveTransactionUrl(int transactionId, string password)
            Get["/webservices/public/management.asmx/ApproveTransaction"] = parameters =>
            {
                int    transactionId = parameters.transactionId;
                string password      = parameters.password;


                var merchant = db.Merchants.FirstOrDefault(x => x.Password == password);

                if (merchant == null)
                {
                    return(HttpStatusCode.InternalServerError);
                }

                var transaction = db.Transactions.FirstOrDefault(x => x.TransactionId == transactionId);

                if (transaction == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                transaction.IsAwaitingApproval = true;
                db.Transactions.Attach(transaction);
                db.SaveChanges();

                return(HttpStatusCode.OK);
            };


            //public static string GetCaptureUrl(int transactionId, string password)
            Get["/webservices/public/management.asmx/CaptureV2"] = parameters =>
            {
                int    transactionId = parameters.transactionId;
                string password      = parameters.password;


                var merchant = db.Merchants.FirstOrDefault(x => x.Password == password);

                if (merchant == null)
                {
                    return(HttpStatusCode.InternalServerError);
                }

                var transaction = db.Transactions.FirstOrDefault(x => x.TransactionId == transactionId);

                if (transaction == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                transaction.Captured   = true;
                transaction.CapturedAt = DateTime.Now;
                db.Transactions.Attach(transaction);
                db.SaveChanges();

                var model = new TransactionResult();
                model.AcquirerStatusCode = 123;
                model.IsSuccess          = true;

                return(Response.AsXml(model));
            };

            //public static string GetChangeCaptureAmountUrl(int transactionId, string password, int amount)
            Get["/webservices/public/management.asmx/ChangeCaptureAmount"] = parameters =>
            {
                int    transactionId = parameters.transactionId;
                string password      = parameters.password;
                int    amount        = parameters.amount;

                var merchant = db.Merchants.FirstOrDefault(x => x.Password == password);

                if (merchant == null)
                {
                    return(HttpStatusCode.InternalServerError);
                }

                var transaction = db.Transactions.FirstOrDefault(x => x.TransactionId == transactionId);

                if (transaction == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                transaction.Amount = amount;
                db.Transactions.Attach(transaction);
                db.SaveChanges();

                return(HttpStatusCode.OK);
            };

            //public static string GetCreditUrl(int transactionId, string password, int amount)
            Get["/webservices/public/management.asmx/CreditV2"] = parameters =>
            {
                int    transactionId = parameters.transactionId;
                string password      = parameters.password;
                int    amount        = parameters.amount;

                var merchant = db.Merchants.FirstOrDefault(x => x.Password == password);

                if (merchant == null)
                {
                    return(HttpStatusCode.InternalServerError);
                }

                var transaction = db.Transactions.FirstOrDefault(x => x.TransactionId == transactionId);

                if (transaction == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                transaction.Amount = amount;
                db.Transactions.Attach(transaction);
                db.SaveChanges();

                TransactionResult result = new TransactionResult();
                result.AcquirerStatusCode = 100;
                result.IsSuccess          = true;

                return(Response.AsXml(result));
            };

            //public static string GetDeleteTransactionUrl(int transactionId, string password)
            Get["/webservices/public/management.asmx/DeleteTransaction"] = parameters =>
            {
                int    transactionId = parameters.transactionId;
                string password      = parameters.password;


                var merchant = db.Merchants.FirstOrDefault(x => x.Password == password);

                if (merchant == null)
                {
                    return(HttpStatusCode.InternalServerError);
                }

                var transaction = db.Transactions.FirstOrDefault(x => x.TransactionId == transactionId);

                if (transaction == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                transaction.IsDeleted = true;
                db.Transactions.Attach(transaction);
                db.SaveChanges();

                return(HttpStatusCode.OK);
            };

            //public static string GetQueryTransactionUrl(int transactionId, string password)
            Get["/webservices/public/management.asmx/QueryTransaction"] = parameters =>
            {
                int    transactionId = parameters.transactionId;
                string password      = parameters.password;

                var merchant = db.Merchants.FirstOrDefault(x => x.Password == password);

                if (merchant == null)
                {
                    return(HttpStatusCode.InternalServerError);
                }

                var transaction = db.Transactions.FirstOrDefault(x => x.TransactionId == transactionId);

                if (transaction == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                TransactionView model = new TransactionView();
                model.Acquirer            = "NetsTeller";
                model.MerchantNumber      = merchant.MerchantId;
                model.TransactionID       = transaction.TransactionId;
                model.AuthorizationAmount = transaction.AuthorizationAmount;
                model.CaptureAmount       = transaction.CaptureAmount;
                model.CaptureErrorCode    = transaction.CaptureErrorCode;
                model.CardType            = transaction.CardType;
                model.Currency            = transaction.CurrencyAsInt;
                model.DateAuthorized      = transaction.DateAuthorized.GetValueOrDefault();
                model.DateCaptured        = transaction.DateCaptured.GetValueOrDefault();
                model.DateCreated         = transaction.DateCreated;
                model.DateEarliestCapture = transaction.DateEarliestCapture;
                model.IsAwaitingApproval  = transaction.IsAwaitingApproval;
                model.IsCaptured          = transaction.IsCaptured;
                model.MerchantID          = transaction.MerchantId;
                model.OrderID             = transaction.OrderId;
                model.PANHash             = transaction.PANHash;
                model.SourceIP            = transaction.SourceIp;
                return("OK");
            };

            //public static string GetSetEarlistCaptureUrl(int transactionId, string password, DateTime earliestCapture)
            Get["/webservices/public/management.asmx/SetEarliestCapture"] = parameters =>
            {
                int      transactionId   = parameters.transactionId;
                DateTime earliestCapture = parameters.earliestCapture;
                string   password        = parameters.password;

                var merchant = db.Merchants.FirstOrDefault(x => x.Password == password);

                if (merchant == null)
                {
                    return(HttpStatusCode.InternalServerError);
                }

                var transaction = db.Transactions.FirstOrDefault(x => x.TransactionId == transactionId);

                if (transaction == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                transaction.DateEarliestCapture = earliestCapture;

                return(HttpStatusCode.OK);
            };

            //public static string GetWithholdForApprovalUrl(int transactionId, string password)
            Get["/webservices/public/management.asmx/WithholdForApproval"] = parameters =>
            {
                int    transactionId = parameters.transactionId;
                string password      = parameters.password;



                return("Ok");
            };
        }
Beispiel #3
0
        public AuthorizeModule(FreepayMockContext db)
        {
            Post["/secure/authorize.aspx"] = parameters =>
            {
                string acceptUrl      = Request.Form.AcceptURL;
                string declineUrl     = Request.Form.DeclineURL;
                int    subscription   = Request.Form.Subscription;
                int    merchantNumber = Request.Form.MerchantNumber;
                int    amount         = Request.Form.Amount;
                int    currency       = Request.Form.Currency;
                string orderNumber    = Request.Form.OrderNumber;
                string cardNumber     = Request.Form.CardNumber;
                string expireMonth    = Request.Form.ExpireMonth;
                string expireYear     = Request.Form.ExpireYear;
                string cvc            = Request.Form.cvc;

                var merchant = db.Merchants.FirstOrDefault(x => x.MerchantId == merchantNumber);

                if (merchant == null)
                {
                    // TODO Log this error
                    return(HttpStatusCode.InternalServerError);
                }

                var card = new CardRecord();
                card.CardNumber  = cardNumber;
                card.ExpireMonth = expireMonth;
                card.ExpireYear  = expireYear;
                card.CVC         = cvc;

                if (subscription == 1)
                {
                    SubscriptionRecord record = new SubscriptionRecord();
                    record.MerchantNumber = merchantNumber;
                    record.Currency       = currency;

                    // TODO Detect card
                    record.CardType    = "CARD";
                    record.Currency    = currency;
                    record.DateCreated = DateTime.Now;
                    record.Acquirer    = "NetsTeller";
                    record.ExpiryDate  = DateTime.Now.AddDays(30);
                    record.SourceIP    = Request.UserHostAddress;
                    record.OrderID     = orderNumber;

                    db.Subscriptions.Add(record);
                    db.SaveChanges();

                    card.SubscriptionId = record.SubscriptionId;

                    var transaction = new TransactionRecord();
                    transaction.Amount              = amount;
                    transaction.CurrencyAsInt       = currency;
                    transaction.DateEarliestCapture = DateTime.Now;
                    transaction.OrderId             = orderNumber;
                    transaction.AuthorizationAmount = amount;
                    transaction.CaptureAmount       = amount;
                    transaction.DateCreated         = DateTime.Now;
                    transaction.DateAuthorized      = DateTime.Now;
                    transaction.IsAwaitingApproval  = true;
                    transaction.MerchantId          = merchantNumber;
                    transaction.SubscriptionId      = record.SubscriptionId;
                    transaction.IsCaptured          = false;
                    transaction.IsDeleted           = false;
                    transaction.PANHash             = "";
                    transaction.SourceIp            = Request.UserHostAddress;

                    db.Transactions.Add(transaction);
                    db.SaveChanges();

                    card.TransactionId = transaction.TransactionId;
                    card.TransactionId = transaction.TransactionId;
                    db.Cards.Add(card);
                    db.SaveChanges();
                }
                else
                {
                    var transaction = new TransactionRecord();
                    transaction.Amount              = amount;
                    transaction.CurrencyAsInt       = currency;
                    transaction.DateEarliestCapture = DateTime.Now;
                    transaction.DateCreated         = DateTime.Now;;
                    transaction.OrderId             = orderNumber;
                    transaction.AuthorizationAmount = amount;
                    transaction.CaptureAmount       = amount;
                    transaction.DateAuthorized      = DateTime.Now;
                    transaction.IsAwaitingApproval  = true;
                    transaction.MerchantId          = merchantNumber;
                    transaction.IsCaptured          = false;
                    transaction.IsDeleted           = false;
                    transaction.PANHash             = "";
                    transaction.SourceIp            = Request.UserHostAddress;
                    db.Transactions.Add(transaction);
                    db.SaveChanges();

                    card.TransactionId = transaction.TransactionId;
                    db.Cards.Add(card);
                    db.SaveChanges();
                }

                if (subscription == 1 || (currency == 208 && amount >= 45000))
                {
                    var verifyUrl = $"/verified-by-visa?amount={amount}&currency={currency}&acceptUrl={acceptUrl}&declineUrl={declineUrl}";
                    return(Response.AsRedirect(verifyUrl));
                }
                else
                {
                    return(Response.AsRedirect(acceptUrl));
                }
            };
        }