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());
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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"));
        }
Esempio n. 5
0
        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"));
        }
Esempio n. 8
0
        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);
            }
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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"));
        }