public async Task <ActionResult> Pay(string type) { if (!String.IsNullOrWhiteSpace(type)) { string secretKey = ConfigurationManager.AppSettings["PayStackSec"]; var paystackTransactionAPI = new PaystackTransaction(secretKey); string email = User.Identity.GetUserName(); int amount = type == "kilo" ? 100000 : type == "mega" ? 360000 : 960000; var response = await paystackTransactionAPI.InitializeTransaction(email, amount, callbackUrl : "https://localhost:44363/Subscription/VerifyPayment"); if (response.status) { Session["type"] = type; Response.AddHeader("Access-Control-Allow-Origin", "*"); Response.AppendHeader("Access-Control-Allow-Origin", "*"); return(Redirect(response.data.authorization_url)); } return(RedirectToAction("Failed")); } return(View()); }
private static async void VerifyTransaction() { var paystackTransactionAPI = new PaystackTransaction("apikey/secret/key"); var response = await paystackTransactionAPI.VerifyTransaction("reference"); var json = new JavaScriptSerializer().Serialize(response); Console.WriteLine(json); }
public static PaystackTransactionLog ToTransactionLog(this PaystackTransaction paystackTransaction) { if (paystackTransaction == null || paystackTransaction.Data == null) { throw new ArgumentNullException("paystackTransaction"); } PaystackTransactionLog transactionLog = new PaystackTransactionLog(); transactionLog = ToTransactionLogHelper(paystackTransaction, transactionLog); return(transactionLog); }
public async Task <ActionResult> Index() { string secretKey = ConfigurationManager.AppSettings["PaystackSecret"]; var paystackTransactionAPI = new PaystackTransaction(secretKey); var tranxRef = HttpContext.Request.QueryString["reference"]; if (tranxRef != null) { var response = await paystackTransactionAPI.VerifyTransaction(tranxRef); if (response.status) { try { using (var db = new LoanComparerModel()) { int currentCount = 0; currentCount = (int)Session["count"]; db.loandetails.Find((int)Session["selectedItemId"]).count = currentCount + 1; db.loandetails.Find((int)Session["selectedItemId"]).date = DateTime.Now; // Update subscription table var user = new subscription { userid = User.Identity.GetUserName().ToLower(), startdate = DateTime.Now, enddate = DateTime.Now.AddMonths(1) }; db.subscriptions.Add(user); db.SaveChanges(); } } catch (Exception e) { return(View("Error")); } return(View(response)); } } return(View("PaymentError")); }
public static PaystackTransactionLog ToTransactionLog(this PaystackTransaction paystackTransaction, PaystackTransactionLog transactionLog) { if (paystackTransaction == null || paystackTransaction.Data == null) { throw new ArgumentNullException("paystackTransaction"); } if (transactionLog == null || transactionLog.Id <= 0) { throw new ArgumentNullException("transactionLog"); } return(ToTransactionLogHelper(paystackTransaction, transactionLog)); }
public async Task <ActionResult> InitTransaction() { var customerDetail = new CustomerViewModel() { email = Request.Form.Get("cust_email"), firstName = Request.Form.Get("cust_fname"), lastName = Request.Form.Get("cust_lname"), phone = Request.Form.Get("cust_phone") }; var cartCode = Helpers.GetCartId(); var cartItem = repo.GetCartItem(cartCode); var paystackSec_Key = ConfigurationManager.AppSettings["PayStackKey"].ToString(); var payStackAPI = new PaystackTransaction(paystackSec_Key); var amount = (Convert.ToInt32(cartItem.amount) * 100); var reqBody = new Paystack.Net.Models.TransactionInitializationRequestModel() { email = customerDetail.email, firstName = customerDetail.firstName, lastName = customerDetail.lastName, amount = amount }; //Charge Customer var initResponse = await payStackAPI.InitializeTransaction(reqBody); if (initResponse.status) { //Create Order and customer var custCode = Helpers.GenerateRandomDigitCode(10); if (repo.CreateCustomerSubscription(customerDetail.firstName, customerDetail.lastName, customerDetail.email, customerDetail.phone, custCode, cartItem.planName, cartItem.amount, initResponse.data.reference, cartItem.planId)) { repo.RemoveItemFromCart(cartCode); Response.AddHeader("Access-Control-Allow-Origin", "*"); Response.AppendHeader("Access-Control-Allow-Origin", "*"); Response.Redirect(initResponse.data.authorization_url); } } return(View("OrderError")); }
public async Task <ActionResult> VerifyPayment(string reference = null) { if (reference != null) { string secretKey = ConfigurationManager.AppSettings["PayStackSec"]; var paystackTransactionAPI = new PaystackTransaction(secretKey); var response = await paystackTransactionAPI.VerifyTransaction(reference); if (response.status && response.data.status == "success") { string userId = User.Identity.GetUserId(); User loggedInUser = _providerRepository.GetUserById(userId); var type = (string)Session["type"]; int days = type == "kilo" ? 30 : type == "mega" ? 120 : 365; bool[] checks = _subscriptionRepository.CheckUserSubscription(userId); if (checks[0]) { var sub = _subscriptionRepository.GetByUserId(userId); sub.startDate = DateTime.Now; sub.endDate = DateTime.Now.AddDays(days); sub.lastSubDate = DateTime.Now; sub.type = type; _subscriptionRepository.Save(); } else { _subscriptionRepository.Add(new Subscription { startDate = DateTime.Now, endDate = DateTime.Now.AddDays(days), lastSubDate = DateTime.Now, type = type, userId = userId }); _subscriptionRepository.Save(); } int providerId = (int)Session["providerId"]; return(RedirectToAction("Details", "Provider", new { id = providerId })); } return(RedirectToAction("Failed")); } return(RedirectToAction("Index", "Home")); }
public async Task PostProcessPayment(ProcessPaymentRequest processPaymentRequest) { HttpContext httpContext = processPaymentRequest.HttpContext; try { if (processPaymentRequest.PaymentStatus == PaymentStatus.Paid) { return; } int selectedCurrencyId = processPaymentRequest.SelectedCurrencyId; PaystackSupportedCurrency supportedCurrency = await _supportedCurrencyService.GetSupportedCurrencyById(selectedCurrencyId); if (supportedCurrency == null || supportedCurrency.Id <= 0) { throw new ArgumentNullException("Plugins.SmartStore.Paystack.SupportedCurrencyNullArgument"); } PaystackSetting paystackSettings = await _settingService.GetSetting <PaystackSetting>(); if (paystackSettings == null) { throw new ArgumentNullException("Plugins.SmartStore.Paystack.PaystackSettingsNullArgument"); } PaystackTransaction transactionResponse = await _gatewayLuncher.MakePayment(processPaymentRequest, paystackSettings, supportedCurrency, httpContext); if (transactionResponse != null && transactionResponse.status && !string.IsNullOrWhiteSpace(transactionResponse.Data.authorization_url)) { await _gatewayLuncher.LogTransaction(transactionResponse); await _gatewayLuncher.LunchPaymentPage(httpContext, transactionResponse.Data.authorization_url); } else { string errorMessage = transactionResponse != null ? transactionResponse.message : string.Format("Plugins.SmartStore.Paystack.EmptyGatewayResponseMessage"); httpContext.Session.SetString(_gatewayLuncher.ErrorMessage, errorMessage); } } catch (Exception ex) { httpContext.Session.SetString(_gatewayLuncher.ErrorMessage, ex.Message); } }
private static PaystackTransactionLog ToTransactionLogHelper(PaystackTransaction paystackTransaction, PaystackTransactionLog transactionLog) { transactionLog.Message = paystackTransaction.message; transactionLog.RegistrationId = paystackTransaction.RegisterationId.GetValueOrDefault(); if (paystackTransaction.Data != null) { transactionLog.Amount = paystackTransaction.Data.amount; transactionLog.Currency = paystackTransaction.Data.currency; transactionLog.TransactionDate = paystackTransaction.Data.transaction_date; transactionLog.Status = paystackTransaction.Data.status; transactionLog.Reference = paystackTransaction.Data.reference; transactionLog.Domain = paystackTransaction.Data.domain; transactionLog.GatewayResponse = paystackTransaction.Data.gateway_response; transactionLog.IPAddress = paystackTransaction.Data.ip_address; transactionLog.Fees = paystackTransaction.Data.fees; if (!paystackTransaction.Data.authorization_url.IsEmpty()) { transactionLog.AuthorizationUrl = paystackTransaction.Data.authorization_url; } if (!paystackTransaction.Data.access_code.IsEmpty()) { transactionLog.AccessCode = paystackTransaction.Data.access_code; } } if (paystackTransaction.Data.authorization != null) { transactionLog.AuthorizationCode = paystackTransaction.Data.authorization.authorization_code; transactionLog.CardType = paystackTransaction.Data.authorization.card_type; transactionLog.Last4 = paystackTransaction.Data.authorization.last4; transactionLog.ExpiryMonth = paystackTransaction.Data.authorization.exp_month; transactionLog.ExpiryYear = paystackTransaction.Data.authorization.exp_year; transactionLog.Bin = paystackTransaction.Data.authorization.bin; transactionLog.Bank = paystackTransaction.Data.authorization.bank; transactionLog.Channel = paystackTransaction.Data.authorization.channel; transactionLog.Signature = paystackTransaction.Data.authorization.signature; transactionLog.Brand = paystackTransaction.Data.authorization.brand; transactionLog.Reusable = paystackTransaction.Data.authorization.reusable; transactionLog.CountryCode = paystackTransaction.Data.authorization.country_code; } return(transactionLog); }
public async Task LogTransaction(PaystackTransaction paystackTransaction) { if (paystackTransaction == null || paystackTransaction.Data == null) { throw new ArgumentNullException("paystackTransaction"); } PaystackTransactionLog transactionLog = await _transactionLogService.GetByReferenceAsync(paystackTransaction.Data.reference); if (transactionLog == null || transactionLog.Id <= 0) { throw new ArgumentNullException("Transaction Log failed on Retrieval!"); } paystackTransaction.RegisterationId = GatewayLuncher.RegistrationId; transactionLog = paystackTransaction.ToTransactionLog(transactionLog); _transactionLogService.Update(transactionLog); }
public async Task <ActionResult> PaymentCallBack() { var tranxRef = HttpContext.Request.QueryString["reference"]; if (!string.IsNullOrWhiteSpace(tranxRef)) { var paystackSec_Key = ConfigurationManager.AppSettings["PayStackKey"].ToString(); var payStackAPI = new PaystackTransaction(paystackSec_Key); var response = await payStackAPI.VerifyTransaction(tranxRef); if (response.status) { var subscriberInfo = repo.GetSubscription(tranxRef); var planId = subscriberInfo.PlanId; var subscriptionStartDate = DateTime.Now.AddMonths(1); var payStckSubscription = new Paystack.Net.SDK.Subscription.PaystackSubscription(paystackSec_Key); var subscriptionResponse = await payStckSubscription.CreateSubscription(response.data.customer.email, planId, response.data.authorization.authorization_code, subscriptionStartDate.ToString("s")); var customer = repo.GetCustomerByEmail(response.data.customer.email); if (subscriptionResponse.status) { var data = subscriptionResponse.data; repo.CreateSubscriberAccount(response.data.customer.email, "password", planId, data.subscription_code, data.email_token, subscriptionStartDate); repo.UpdateSubscription(tranxRef); } return(RedirectToAction("Success")); } else { return(RedirectToAction("error")); } } return(RedirectToAction("error")); }