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"); }; }
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}¤cy={currency}&acceptUrl={acceptUrl}&declineUrl={declineUrl}"; return(Response.AsRedirect(verifyUrl)); } else { return(Response.AsRedirect(acceptUrl)); } }; }