Beispiel #1
0
        public IActionResult Index()
        {
            PayStackApi api = new PayStackApi(SecretKey);

            TransactionInitializeRequest request = new TransactionInitializeRequest();

            request.AmountInKobo = 100;
            request.Email        = "*****@*****.**";


            //request.MetadataObject["CustomOrderNumber"] = postProcessPaymentRequest.Order.CustomOrderNumber;
            //request.MetadataObject["OrderGuid"] = postProcessPaymentRequest.Order.OrderGuid.ToString();
            //request.CallbackUrl = $"{storeLocation}Plugins/PaymentPayStackStandard/HandleCallback";
            request.Reference = Guid.NewGuid().ToString();


            var response = api.Transactions.Initialize(request, true);

            if (response.Status == true)
            {
                HttpContext.Response.Redirect(response.Data.AuthorizationUrl);
            }

            return(View());
        }
Beispiel #2
0
        public static void VerifyPaymentReference()
        {
            _api = new PayStackApi("sk_test_e99df0019c15a05c958ce59ade539eb7b8f26f36");
            var response = _api.Transactions.Verify("tbe3tzaz4g");

            response.Print();
        }
        // this action implements payment with paystack
        public ActionResult MakePayment(MakePayment payment)
        {
            if (!ModelState.IsValid)
            {
                return(View("CreatePaymentForm"));
            }
            //get the secret key from appsettings
            //then pass into the paystackApi
            var TestSecret = ConfigurationManager.AppSettings["PayStackSecret"];
            var api        = new PayStackApi(TestSecret);
            //unique ref
            var    result          = Guid.NewGuid();
            string UniqueReference = result.ToString();
            //tryig  to initialze transaction, wich in turn gives a refrence code
            var response = api.Transactions.Initialize(payment.Email, payment.Amount, UniqueReference);

            if (response.Status)
            {
                Response.AddHeader("Access-Control-Allow-Origin", "*");
                Response.AppendHeader("Access-Control-Allow-Origin", "*");
                Response.Redirect(response.Data.AuthorizationUrl);
                // response.Data.Reference;
            }
            else
            {
                //Handling Error
            }

            //Verifiyng response
            var    verifyresponse = api.Transactions.Verify(response.Data.Reference);
            string authcode       = null;

            if (verifyresponse.Status)
            {
                var authcode1 = response.Data.AccessCode;
                authcode = authcode1;
            }
            else
            {
                //Handling Error
            }

            //List transaction
            var listTransaction = api.Transactions.List();
            //fetch transaction
            var fetchTransaction = api.Transactions.Fetch(UniqueReference);

            //charge Authorization
            var chargeAuthorization = api.Transactions.ChargeAuthorization(authcode, payment.Email, payment.Amount, response.Data.Reference);

            if (chargeAuthorization.Status)
            {
                // return
            }


            //Paystack Logic here
            return(View("Payment Succesfull"));
        }
Beispiel #4
0
        private static void Main(string[] args)
        {
            var config = new ConfigurationBuilder()
                         .SetBasePath(Directory.GetParent(AppContext.BaseDirectory).FullName)
                         .AddJsonFile("appsettings.json", false)
                         .Build();

            _api = new PayStackApi(config["PayStackSecret"]);

            // Transfers
            //CreateTransferRecipient();
            AccessRawJsonSentFromServer();

            //
            // Miscellaneous
            //

            // 1.
            // ListBanks();

            // 2.
            // var response = _api.Miscellaneous.ResolveAccountNumber("0043216012", "058");
            //response.Print();

            // 3.
            //_api.ResolveCardBin("412345");

            //
            // Settlements
            //
            // SettlementsFetch();

            //
            // Sub Accounts
            //
            // ListSubAccounts();
            // UpdateSubAccount();
            // GetBanks();

            //
            // Customers
            //
            // CustomersList();
            // CustomerFetch();
            // CustomerUpdate();
            // CustomerRiskAction();

            //
            // Transactions
            //
            // TransactionExport_Setup();
            // TransactionTotals_Setup();
            // TransactionTimeline_Setup();
            // TransactionFetch_Setup();
            // TransactionList_Setup();
            // InitializeRequest_Setup();
            // VerifyPaymentReference();
        }
Beispiel #5
0
        public IActionResult Callback()
        {
            try
            {
                PaystackPaymentSettings standardPaymentSettings = _settingService.LoadSetting <PaystackPaymentSettings>(_storeContext.ActiveStoreScopeConfiguration);

                string str = Request.QueryString.ToString();
                NameValueCollection       queryString = HttpUtility.ParseQueryString(str);
                TransactionVerifyResponse transactionVerifyResponse = new PayStackApi(standardPaymentSettings.SecretKey).Transactions.Verify(queryString.Get("reference"));

                if (transactionVerifyResponse.Status && transactionVerifyResponse.Data.Status == "success")
                {
                    Metadata metadata = transactionVerifyResponse.Data.Metadata;
                    string   empty1   = string.Empty;
                    string   empty2   = string.Empty;
                    foreach (KeyValuePair <string, object> keyValuePair in (Dictionary <string, object>)metadata)
                    {
                        string key = keyValuePair.Key;
                        if (keyValuePair.Key == "customOrderNumber")
                        {
                            empty2 = keyValuePair.Value.ToString();
                        }
                        if (keyValuePair.Key == "orderGuid")
                        {
                            empty1 = keyValuePair.Value.ToString();
                        }
                    }

                    Order orderByGuid = _orderService.GetOrderByGuid(Guid.Parse(empty1));

                    if (this._orderProcessingService.CanMarkOrderAsPaid(orderByGuid))
                    {
                        orderByGuid.AuthorizationTransactionId = transactionVerifyResponse.Data.Reference;
                        this._orderService.UpdateOrder(orderByGuid);
                        this._orderProcessingService.MarkOrderAsPaid(orderByGuid);
                    }

                    return((IActionResult)((ControllerBase)this).RedirectToRoute("CheckoutCompleted", (object)new
                    {
                        orderId = ((BaseEntity)orderByGuid).Id
                    }));
                }
                else if (transactionVerifyResponse.Status && transactionVerifyResponse.Data.Status == "failed" || (!transactionVerifyResponse.Status || !(transactionVerifyResponse.Data.Status == "abandoned")))
                {
                    var order = _orderService.SearchOrders(_storeContext.CurrentStore.Id,
                                                           customerId: _workContext.CurrentCustomer.Id, pageSize: 1).FirstOrDefault();
                    return(RedirectToRoute("OrderDetails", new { orderId = order.Id }));
                }

                return((IActionResult)((ControllerBase)this).Content(string.Empty));
            }
            catch (Exception ex)
            {
                return((IActionResult)((ControllerBase)this).Content(string.Empty));
            }
        }
Beispiel #6
0
        private TransactionVerifyResponse confirmPayStackTransaction(String refCode)
        {
            var testOrLiveSecret = ConfigurationManager.AppSettings["PayStackSecret"];

            var api = new PayStackApi(testOrLiveSecret);

            var transactionResponse = api.Transactions.Verify(refCode);

            return(transactionResponse);
        }
Beispiel #7
0
        public JsonResult ListBanks(object request)
        {
            _api = new PayStackApi("sk_test_760c409e1e8e60e037b6e6d7b68ab5f51d3c2f90");

            request = _api.SubAccounts.GetBanks();

            (request as IPreparable)?.Prepare();

            //var bin = JsonConvert.SerializeObject(request, Formatting.Indented, PayStackApi.SerializerSettings);

            return(Json(request, JsonRequestBehavior.AllowGet));
        }
        public async Task <ActionResult> MakePayment(OrderPaymentVm model)
        {
            if (ModelState.IsValid)
            {
                //var totalSale = await storeDB.Sales.AsNoTracking().CountAsync();
                //var saleId = totalSale + 1;


                var sale = new Sale
                {
                    CustomerId = model.CustomerId,
                    Total      = model.TotalAmount,
                    IsPayed    = false,
                    SaleDate   = DateTime.Now
                };
                storeDB.Sales.Add(sale);
                await storeDB.SaveChangesAsync();

                //Process the order
                var cart = ShoppingCart.GetCart(this.HttpContext);
                sale = cart.CreateOrder(sale);
                var testOrLiveSecret = ConfigurationManager.AppSettings["PayStackSecret"];
                var api = new PayStackApi(testOrLiveSecret);
                // Initializing a transaction
                //var response = api.Transactions.Initialize("*****@*****.**", 5000000);
                var transactionInitializaRequest = new TransactionInitializeRequest
                {
                    //Reference = "SwifKampus",
                    AmountInKobo = _query.ConvertToKobo((int)model.TotalAmount),
                    CallbackUrl  = "http://localhost:59969/Checkout/ConfrimPayment",
                    Email        = model.Email,
                    Bearer       = "Ajaoko Order Payment",

                    CustomFields = new List <CustomField>
                    {
                        new CustomField("customerid", "customerid", model.CustomerId),
                        new CustomField("amount", "amount", model.TotalAmount.ToString(CultureInfo.InvariantCulture)),
                        new CustomField("saleid", "saleid", sale.SaleId.ToString())
                    }
                };
                var response = api.Transactions.Initialize(transactionInitializaRequest);

                if (response.Status)
                {
                    //redirect to authorization url
                    return(RedirectPermanent(response.Data.AuthorizationUrl));
                    // return Content("Successful");
                }
                return(Content("An error occurred"));
            }
            return(RedirectToAction("AddressAndPayment"));
        }
Beispiel #9
0
        public static string PayStackApi(string email, int amount)
        {
//      var results =
            var testOrLiveSecret = ConfigurationManager.AppSettings["PayStackSecret"];
            var api      = new PayStackApi(testOrLiveSecret);
            var response = api.Transactions.Initialize(email, amount);

            if (response.Status)
            {
                return(response.Data.AuthorizationUrl);
            }

            return(response.Message);
        }
Beispiel #10
0
        public JsonResult Paystack(object request, string Bvn)
        {
            _api = new PayStackApi("sk_live_27a5ba903be8e7f5a862eaf39d26b916a28eac0d");

            //request = _api.ResolveCardBin("539941");

            request = _api.ResolveBvn(Bvn);

            (request as IPreparable)?.Prepare();

            //var bin = JsonConvert.SerializeObject(request, Formatting.Indented, PayStackApi.SerializerSettings);

            return(Json(request, JsonRequestBehavior.AllowGet));
        }
        public async Task <ActionResult> ConfrimPayment(string reference)
        {
            var testOrLiveSecret = ConfigurationManager.AppSettings["PayStackSecret"];
            var api = new PayStackApi(testOrLiveSecret);
            //Verifying a transaction
            var verifyResponse = api.Transactions.Verify(reference); // auto or supplied when initializing;

            if (verifyResponse.Status)
            {
                var convertedValues = new List <SelectableEnumItem>();
                var valuepair       = verifyResponse.Data.Metadata.Where(x => x.Key.Contains("custom")).Select(s => s.Value);

                foreach (var item in valuepair)
                {
                    convertedValues = ((JArray)item).Select(x => new SelectableEnumItem
                    {
                        key   = (string)x["display_name"],
                        value = (string)x["value"]
                    }).ToList();
                }
                //var studentid = _db.Users.Find(id);
                var saleId  = Convert.ToInt32(convertedValues.Where(x => x.key.Equals("saleid")).Select(s => s.value).FirstOrDefault());
                var payment = new OrderPayment()
                {
                    CustomerId      = convertedValues.Where(x => x.key.Equals("customerid")).Select(s => s.value).FirstOrDefault(),
                    PaymentDateTime = DateTime.Now,
                    Amount          = Convert.ToDecimal(convertedValues.Where(x => x.key.Equals("amount")).Select(s => s.value).FirstOrDefault()),
                    IsPayed         = true,
                    SaleId          = saleId,
                    AmountPaid      = _query.ConvertToNaira(verifyResponse.Data.Amount),
                };
                _db.OrderPayments.Add(payment);
                _db.SaveChanges();

                var sale = await storeDB.Sales.AsNoTracking().Where(x => x.SaleId.Equals(saleId)).FirstOrDefaultAsync();

                if (sale != null)
                {
                    sale.IsPayed          = true;
                    _db.Entry(sale).State = EntityState.Modified;
                    await _db.SaveChangesAsync();
                }

                return(RedirectToAction("Details", "Sales", new { id = saleId }));
            }

            return(RedirectToAction("AddressAndPayment"));
        }
        /// <summary>
        /// Verifies IPN
        /// </summary>
        /// <param name="formString">Form string</param>
        /// <param name="values">Values</param>
        /// <returns>Result</returns>
        public TransactionVerificationResponse VerifyTransaction(string referenceCode)
        {
            var secretKey = _paystackStandardPaymentSettings.UseSandbox ?
                            _paystackStandardPaymentSettings.TestSecretToken : _paystackStandardPaymentSettings.LiveSecretToken;

            var payStackApi = new PayStackApi(secretKey);
            var response    = payStackApi.Transactions.Verify(referenceCode);

            return(new TransactionVerificationResponse
            {
                IsVerified = response.Status,
                Amount = (response.Data.Amount / 100),
                Message = response.Message,
                AuthCode = response.Data.Authorization.AuthorizationCode
            });
        }
Beispiel #13
0
        private static void Main(string[] args)
        {
            // VerifyPaymentReference();

            _api = new PayStackApi(ConfigurationManager.AppSettings["PayStackSecret"]);

            //
            // Miscellaneous
            //
            //ListBanks();
            //var response = _api.Miscellaneous.ResolveAccountNumber("0043216012", "058");
            //response.Print();
            CreateRecepient();
            Console.ReadLine();
            //
            // Settlements
            //
            // SettlementsFetch();

            // Miscellaneous
            //_api.ResolveCardBin("412345");

            //
            // Sub Accounts
            //
            // ListSubAccounts();
            // UpdateSubAccount();
            // GetBanks();

            //
            // Customers
            //
            // CustomersList();
            // CustomerFetch();
            // CustomerUpdate();
            //CustomerRiskAction();

            //
            // Transactions
            //
            // TransactionExport_Setup();
            //TransactionTotals_Setup();
            //TransactionTimeline_Setup();
            // TransactionFetch_Setup();
            // TransactionList_Setup();
            // InitializeRequest_Setup();
        }
Beispiel #14
0
        // GET: ProfessionalPayments/ConfrimPayment
        public async Task <ActionResult> ConfrimPayment(string reference)
        {
            var testOrLiveSecret = ConfigurationManager.AppSettings["PayStackSecret"];
            var api = new PayStackApi(testOrLiveSecret);
            //Verifying a transaction
            var verifyResponse = api.Transactions.Verify(reference); // auto or supplied when initializing;

            if (verifyResponse.Status)
            {
                /*
                 * You can save the details from the json object returned above so that the authorization code
                 * can be used for charging subsequent transactions
                 *
                 * // var authCode = verifyResponse.Data.Authorization.AuthorizationCode
                 * // Save 'authCode' for future charges!
                 *
                 */
                //var customfieldArray = verifyResponse.Data.Metadata.CustomFields.A

                var convertedValues = new List <SelectableEnumItem>();
                var valuepair       = verifyResponse.Data.Metadata.Where(x => x.Key.Contains("custom")).Select(s => s.Value);

                foreach (var item in valuepair)
                {
                    convertedValues = ((JArray)item).Select(x => new SelectableEnumItem
                    {
                        key   = (string)x["display_name"],
                        value = (string)x["value"]
                    }).ToList();
                }
                //var studentid = _db.Users.Find(id);
                var professionalPayment = new ProfessionalPayment()
                {
                    //FeeCategoryId = Convert.ToInt32(verifyResponse.Data.Metadata.CustomFields[3].Value),
                    ProfessionalWorkerId = convertedValues.Where(x => x.key.Equals("professionalworkerid")).Select(s => s.value).FirstOrDefault(),
                    PaymentDateTime      = DateTime.Now,
                    Amount  = Convert.ToDecimal(convertedValues.Where(x => x.key.Equals("amount")).Select(s => s.value).FirstOrDefault()),
                    IsPayed = true,
                    //StudentId = "HAS-201",
                    AmountPaid = _query.ConvertToNaira(verifyResponse.Data.Amount),
                };
                _db.ProfessionalPayments.Add(professionalPayment);
                await _db.SaveChangesAsync();
            }

            return(RedirectToAction("Index"));
        }
        public async Task <ActionResult> Create(MerchantPaymentVm model)
        {
            if (ModelState.IsValid)
            {
                var merchantId = User.Identity.GetUserId();

                var merchant = await _db.Merchants.AsNoTracking()
                               .FirstOrDefaultAsync(x => x.MerchantId.Equals(merchantId));

                var testOrLiveSecret = ConfigurationManager.AppSettings["PayStackSecret"];
                var api = new PayStackApi(testOrLiveSecret);
                // Initializing a transaction
                //var response = api.Transactions.Initialize("*****@*****.**", 5000000);
                var transactionInitializaRequest = new TransactionInitializeRequest
                {
                    //Reference = "SwifKampus",
                    AmountInKobo = _query.ConvertToKobo((int)model.Amount),
                    //CallbackUrl = "https://unibenportal.azurewebsites.net/SchoolFeePayments/ConfrimPayment",
                    CallbackUrl = "http://localhost:59969/MerchantPayments/ConfrimPayment",
                    Email       = merchant.Email,
                    Bearer      = "Application fee",

                    CustomFields = new List <CustomField>
                    {
                        new CustomField("merchantid", "merchantid", merchant.MerchantId),
                        new CustomField("amount", "amount", model.Amount.ToString(CultureInfo.InvariantCulture))
                        //new CustomField("sessionid", "sessionid", schoolFeePayment.SessionId.ToString()),
                        //new CustomField("feepaymentid","feepaymentid", schoolFeePayment.FeeCategoryId.ToString())
                        //new CustomField("paymentmode","paymentmode", schoolFeePayment.p)
                    }
                };
                var response = api.Transactions.Initialize(transactionInitializaRequest);

                if (response.Status)
                {
                    //redirect to authorization url
                    return(RedirectPermanent(response.Data.AuthorizationUrl));
                    // return Content("Successful");
                }
                return(Content("An error occurred"));
            }
            //return View(schoolFeePayment);
            return(RedirectToAction("Create"));
        }
        // GET: MerchantPayments/ConfrimPayment
        public async Task <ActionResult> ConfrimPayment(string reference)
        {
            var testOrLiveSecret = ConfigurationManager.AppSettings["PayStackSecret"];
            var api = new PayStackApi(testOrLiveSecret);
            //Verifying a transaction
            var verifyResponse = api.Transactions.Verify(reference); // auto or supplied when initializing;

            if (verifyResponse.Status)
            {
                var convertedValues = new List <SelectableEnumItem>();
                var valuepair       = verifyResponse.Data.Metadata.Where(x => x.Key.Contains("custom")).Select(s => s.Value);

                foreach (var item in valuepair)
                {
                    convertedValues = ((JArray)item).Select(x => new SelectableEnumItem
                    {
                        key   = (string)x["display_name"],
                        value = (string)x["value"]
                    }).ToList();
                }
                var merchantId      = User.Identity.GetUserId();
                var merchantPayment = new MerchantPayment
                {
                    MerchantId      = convertedValues.Where(x => x.key.Equals("merchantid")).Select(s => s.value).FirstOrDefault(),
                    PaymentDateTime = DateTime.Now,
                    ExpectedAmount  = Convert.ToDecimal(convertedValues.Where(x => x.key.Equals("amount")).Select(s => s.value).FirstOrDefault()),
                    IsPayed         = true,
                    //StudentId = "HAS-201",
                    AmountPayed = _query.ConvertToNaira(verifyResponse.Data.Amount),
                };
                _db.MerchantPayments.Add(merchantPayment);
                var editMerchant = await _db.Merchants.Where(x => x.MerchantId.Equals(merchantId)).FirstOrDefaultAsync();

                editMerchant.ExpiryDate       = DateTime.Now.AddDays(365);
                editMerchant.Haspayed         = true;
                _db.Entry(editMerchant).State = EntityState.Modified;


                await _db.SaveChangesAsync();
            }

            return(RedirectToAction("Index"));
        }
Beispiel #17
0
        public async Task <CCResponse> ChargeCard(CCRequest request)
        {
            var response = new CCResponse();

            try
            {
                PayStackApi _payApi = new PayStackApi(_configuration[Constants.PayStackKey]);

                decimal price     = Convert.ToDecimal(request.Amount);
                decimal newAmount = (Convert.ToInt32(price) + 100) * 100;
                var     req       = new CardChargeRequest
                {
                    Amount = newAmount.ToString(),
                    Card   = new Card
                    {
                        Number      = request.CardNumber,
                        Cvv         = request.cardCvv,
                        ExpiryMonth = request.cardExpiryMonth,
                        ExpiryYear  = request.cardExpiryYear
                    },
                    Email     = request.Email,
                    Reference = DateTime.Now.Ticks.ToString().Substring(0, 10),
                    Pin       = request.pin
                };

                var payAesponse = _payApi.Charge.ChargeCard(req);

                if (!payAesponse.Status)
                {
                    throw new Exception(payAesponse?.Data?.Message);
                }
                var JsonObj = JsonConvert.SerializeObject(payAesponse);
                var resObj  = JsonConvert.DeserializeObject <CCResponse>(JsonObj);// Variable to test if Serialized Object Holds Contents
                resObj.data.RealAmount = newAmount;
                response = resObj;
            }
            catch (Exception ec)
            {
                throw ec;
            }
            return(await Task.FromResult(response));
        }
        /// <summary>
        /// Post process payment (used by payment gateways that require redirecting to a third-party URL)
        /// </summary>
        /// <param name="postProcessPaymentRequest">Payment info required for an order processing</param>
        public void PostProcessPayment(PostProcessPaymentRequest postProcessPaymentRequest)
        {
            var order         = postProcessPaymentRequest.Order;
            var orderUniqueId = postProcessPaymentRequest.Order.OrderGuid.ToString();

            var roundedOrderTotal        = Math.Round(order.OrderTotal, 2);
            var roundedOrderTotalPesewas = Convert.ToInt32(roundedOrderTotal * 100);

            _genericAttributeService.SaveAttribute(postProcessPaymentRequest.Order, PaystackHelper.OrderTotalSentToPaystack, roundedOrderTotal);

            var secretKey = _paystackStandardPaymentSettings.UseSandbox ?
                            _paystackStandardPaymentSettings.TestSecretToken : _paystackStandardPaymentSettings.LiveSecretToken;

            var payStackApi = new PayStackApi(secretKey);

            var request = new TransactionInitializeRequest
            {
                Email        = order.Customer.Email,
                Reference    = orderUniqueId,
                AmountInKobo = roundedOrderTotalPesewas,
                Currency     = "GHS",
            };

            AddOrderInfoMetaData(request, postProcessPaymentRequest);

            if (_paystackStandardPaymentSettings.PassProductNamesAndTotals)
            {
                AddOrderItemsMetaData(request, postProcessPaymentRequest);
            }

            var response = payStackApi.Transactions.Initialize(request);

            if (response.Status)
            {
                _httpContextAccessor.HttpContext.Response.Redirect(response.Data.AuthorizationUrl);
            }
            else
            {
                var thisPage = _webHelper.GetThisPageUrl(true);
                _httpContextAccessor.HttpContext.Response.Redirect(thisPage);
            }
        }
Beispiel #19
0
        public ActionResult Create(CbnFormQViewModel cbnFormQViewModel, object request, string Bvn, string BankName,
                                   string TransactionRef)
        {
            if (ModelState.IsValid)
            {
                cbnFormQViewModel.Email = User.Identity.GetUserName();

                cbnFormQViewModel.SubmissionDate = DateTime.Now.ToLongDateString();

                _api = new PayStackApi("sk_test_760c409e1e8e60e037b6e6d7b68ab5f51d3c2f90");

                var verifyResponse = _api.Transactions.Verify(TransactionRef); // auto or supplied when initializing;
                Debug.WriteLine(TransactionRef);
                db.CbnFormQViewModels.Add(cbnFormQViewModel);
                db.SaveChanges();
                RedirectToAction("Dashboard", "Home");
            }

            return(View(cbnFormQViewModel));
        }
Beispiel #20
0
        /// <summary>
        /// Post process payment (used by payment gateways that require redirecting to a third-party URL)
        /// </summary>
        /// <param name="postProcessPaymentRequest">Payment info required for an order processing</param>
        public void PostProcessPayment(PostProcessPaymentRequest postProcessPaymentRequest)
        {
            string storeLocation = _webHelper.GetStoreLocation(new bool?());

            Math.Round(postProcessPaymentRequest.Order.OrderTotal, 2);

            PayStackApi PaystackApi   = new PayStackApi(_PaystackPaymentSettings.SecretKey);
            Customer    customerById  = _customerService.GetCustomerById(postProcessPaymentRequest.Order.CustomerId);
            string      empty         = string.Empty;
            string      customerEmail = customerById.Email != null || customerById == null ? customerById.Email : _customerService.GetCustomerShippingAddress(customerById).Email;

            TransactionInitializeRequest request = new TransactionInitializeRequest();

            request.AmountInKobo = Convert.ToInt32(Math.Ceiling(postProcessPaymentRequest.Order.OrderTotal)) * 100;
            request.Email        = customerEmail;

            request.MetadataObject["CustomOrderNumber"] = (object)postProcessPaymentRequest.Order.CustomOrderNumber;
            Dictionary <string, object> metadataObject = request.MetadataObject;
            Guid orderGuid = postProcessPaymentRequest.Order.OrderGuid;

            string guidString = orderGuid.ToString();

            metadataObject["OrderGuid"] = (object)guidString;
            request.CallbackUrl         = storeLocation + "Plugins/PaymentPaystack/Callback";
            TransactionInitializeRequest initializeRequest = request;

            orderGuid = postProcessPaymentRequest.Order.OrderGuid;

            guidString = orderGuid.ToString();
            initializeRequest.Reference = guidString;
            TransactionInitializeResponse initializeResponse = PaystackApi.Transactions.Initialize(request, true);

            if (!initializeResponse.Status)
            {
                return;
            }

            _httpContextAccessor.HttpContext.Response.Redirect(initializeResponse.Data.AuthorizationUrl);
        }
Beispiel #21
0
        public async Task <CCResponse> SendOtp(string refer, string otp)
        {
            CCResponse mainResponse;

            try
            {
                PayStackApi _payApi  = new PayStackApi(_configuration[Constants.PayStackKey]);
                var         response = _payApi.Charge.SubmitOTP(refer, otp);
                if (!response.Status)
                {
                    var x = response.Data.Message;
                }
                var JsonObj = JsonConvert.SerializeObject(response);
                var resObj  = JsonConvert.DeserializeObject <CCResponse>(JsonObj);// Variable to test if Serialized Object Holds Contents
                mainResponse = resObj;
            }
            catch (Exception)
            {
                throw;
            }

            return(await Task.FromResult(mainResponse));
        }
 public CustomersApi(PayStackApi api)
 {
     _api = api;
 }
 public MiscellaneousApi(PayStackApi api) => _api = api;
        public async Task <JsonResult> PostHireBooking(GetHireRefcodeRequest hireRequest)
        {
            var response = await Logical.GetHireRefcode(hireRequest);

            IPayStackApi api = new PayStackApi("");
            TransactionInitializeRequest request = new TransactionInitializeRequest();

            Session["HireResponse_"] = response.Item1.Object;
            Session["HireRequest"]   = hireRequest;

            //HireRefCodeReturn call is successful  and payment method is paystack
            if (response.Item1.Code == "200" && hireRequest.PaymentMethod == "5")
            {
                try
                {
                    request.Email        = hireRequest.Email;
                    request.AmountInKobo = Convert.ToInt32(hireRequest.Amount) * 100;
                    // request.AmountInKobo = (int)Session["roundTripHire"] == 0 ? request.AmountInKobo : request.AmountInKobo * 2;
                    request.CallbackUrl = ConfigurationManager.AppSettings["PaystackResponse"];
                    request.MetadataObject["cancel_action"] = ConfigurationManager.AppSettings["PaystackResponse"];
                    request.Reference  = response.Item1.Object.RefCode;
                    request.SubAccount = ConfigurationManager.AppSettings["PaystackSubAccount"] ?? "";

                    var testOrLiveSecret = ConfigurationManager.AppSettings["PayStackSecret"];
                    api = new PayStackApi(testOrLiveSecret);


                    try
                    {
                        var payStackResponse = api.Transactions.Initialize(request);

                        if (payStackResponse.Status)
                        {
                            var PaystackDetails = new ProcessPayStackPayment
                            {
                                amount            = (int)request.AmountInKobo,
                                RefCode           = request.Reference,
                                PayStackReference = payStackResponse.Data.Reference,
                                email             = request.Email
                            };
                            Session["PaystackHireDetails"] = PaystackDetails;

                            Tuple <String, String, getHireRefcodeResponse> returnObject
                                = new Tuple <string, string, getHireRefcodeResponse>(payStackResponse.Data.AuthorizationUrl, "", response.Item1);

                            return(new JsonResult {
                                Data = returnObject
                            });
                        }
                        else
                        {
                            Tuple <String, String> returnObject = new Tuple <string, string>(String.Empty, "failed");
                            return(new JsonResult {
                                Data = returnObject
                            });
                        }
                    }
                    catch (Exception ex)
                    {
                        Logical.WriteToLog(ex.Message);


                        return(new JsonResult {
                            Data = new Tuple <String, String>("failed", ex.Message)
                        });
                    }
                }
                catch (Exception ex)
                {
                    return(new JsonResult {
                        Data = new Tuple <String, String>("failed", ex.Message)
                    });
                }


                //Tuple<String, String> returnObject = new Tuple<string, string>("", "");
            }
            else if (hireRequest.PaymentMethod == "12")
            {
                var buttonId = "BankTransfer";
                Session["PaymentGatewayType"] = 12;

                var returnUrl = "/Pages/BookOnHold?refCode=" + response.Item1.Object.RefCode + "&buttonId=" + buttonId;

                return(new JsonResult {
                    Data = returnUrl
                });
            }
            else if (!String.IsNullOrEmpty(response.Item1.Code) && response.Item1.Code != "200")
            {
                return(new JsonResult {
                    Data = new Tuple <String, String>("failed", response.Item1.ShortDescription)
                });
            }


            return(new JsonResult {
                Data = new Tuple <String, String>("failed", "Server error")
            });
        }
        public async Task <JsonResult> PostBooking(PostSearchModel booking)
        {
            Session["BookingRequest"] = booking;
            booking.Discount          = 0;
            var payStackUrl = String.Empty;

            try
            {
                if (booking.Beneficiaries == null)
                {
                    booking.Beneficiaries = new List <GigmsBookingBeneficiary>();
                }
            }
            catch (Exception ex)
            {
                Console.Write(ex);
                booking.Beneficiaries = new List <GigmsBookingBeneficiary>();
            }

            var response = await Logical.PostSearchObjects(booking);

            if (!response.Item1.Code.Equals("200"))
            {
                return(new JsonResult {
                    Data = null
                });
            }


            Session["transactionDetails"] = response.Item1;
            var amount = Convert.ToInt64(booking.Amount) * 100;


            // var response = api.Transactions.Initialize(email, (int)amount);


            //Flutterwave
            if (booking.PaymentMethod.Equals(8))
            {
                Tuple <String, String, String> response_ = new Tuple <string, string, String>("", "", "");
                if (!String.IsNullOrEmpty(response.Item1.Object.BookingReferenceCode))
                {
                    var pubKey      = ConfigurationManager.AppSettings["FlutterWavePublicKey"];
                    var secKey      = ConfigurationManager.AppSettings["FlutterWaveSecretKey"];
                    var txref       = response.Item1.Object.BookingReferenceCode;
                    var redirectUrl = ConfigurationManager.AppSettings["FlutterWaveRedirect"] + txref;
                    //PBFPubKey.Text + amount.Text + "NG" + "NGN" + customer_email.Text + "card" + 1 + redirect_url.Text + txref.Text + secKey
                    var hash = _GetSha256Hash(pubKey + booking.Amount.Split(new String[] { "." }, StringSplitOptions.None)[0] + "NG" + "NGN" + booking.Email + "card" + 1 + redirectUrl + txref + secKey);

                    response_ = new Tuple <String, String, String>(response.Item1.Object.BookingReferenceCode, hash, redirectUrl);
                }

                return(new JsonResult {
                    Data = response_
                });
            }

            //Paystack
            else if (booking.PaymentMethod.Equals(5))
            {
                var request = new TransactionInitializeRequest();
                request.Email        = booking.Email;
                request.AmountInKobo = (int)amount;
                request.CallbackUrl  = ConfigurationManager.AppSettings["PaystackResponse"];
                request.MetadataObject["cancel_action"] = ConfigurationManager.AppSettings["PaystackResponse"];
                request.Reference  = response.Item1.Object.BookingReferenceCode;
                request.SubAccount = ConfigurationManager.AppSettings["PaystackSubAccount"] ?? "";

                var testOrLiveSecret = ConfigurationManager.AppSettings["PayStackSecret"];
                var api = new PayStackApi(testOrLiveSecret);

                try
                {
                    var payStackResponse = api.Transactions.Initialize(request);

                    if (payStackResponse.Status)
                    {
                        var PaystackDetails = new ProcessPayStackPayment
                        {
                            amount            = (int)amount,
                            RefCode           = request.Reference,
                            PayStackReference = payStackResponse.Data.Reference,
                            email             = request.Email
                        };
                        Session["PaystackDetails"] = PaystackDetails;
                        payStackUrl = payStackResponse.Data.AuthorizationUrl;

                        return(new JsonResult {
                            Data = payStackUrl
                        });
                    }
                    else
                    {
                        return(new JsonResult {
                            Data = null
                        });
                    }
                }
                catch (Exception ex)
                {
                    Logical.WriteToLog(ex.Message);


                    return(new JsonResult {
                        Data = null
                    });
                }
            }

            else if (booking.PaymentMethod.Equals(12))
            {
                var buttonId = "lnkbtnGtbUssd";
                Session["PaymentGatewayType"] = 12;

                var returnUrl = "/Pages/BookOnHold?refCode=" + response.Item1.Object.BookingReferenceCode + "&buttonId=" + buttonId;

                return(new JsonResult {
                    Data = returnUrl
                });
            }
            else if (booking.PaymentMethod.Equals(7) || booking.PaymentMethod.Equals(10) || booking.PaymentMethod.Equals(12) ||
                     booking.PaymentMethod.Equals(14) || booking.PaymentMethod.Equals(16))
            {
                var buttonId = "ussd";
                Session["PaymentGatewayType"] = 0;

                var returnUrl = "/Pages/BookOnHold?refCode=" + response.Item1.Object.BookingReferenceCode + "&buttonId=" + buttonId;

                return(new JsonResult {
                    Data = returnUrl
                });
            }
            else
            {
                return(null);
            }
        }
        public async Task <PaymentResultApiModel> ProcessPaymentAsync([FromBody] PaymentRequestApiModel paymentRequest)
        {
            // Get the user
            var user = await mUserManager
                       .GetUserAsync(HttpContext.User);

            // Initialize a paystack transaction

            var payStack = new PayStackApi(Configuration["PayStack:SecretKey"]);

            // Set the request parameters
            var request = new TransactionInitializeRequest
            {
                Reference    = paymentRequest.Reference,
                AmountInKobo = paymentRequest.Amount * 100,
                Email        = user.Email,
                CallbackUrl  = Configuration["AbsoluteUrl"] + ApiRoutes.VerifyPayment,
                Currency     = "NGN"
            };

            try
            {
                // Initialize the payment transaction
                var trxResult = payStack
                                .Transactions
                                .Initialize(request);

                // If the transaction was successful...
                if (trxResult.Status)
                {
                    // Get the authorization url
                    var authorizationUrl = trxResult
                                           .Data
                                           .AuthorizationUrl;

                    // Register a payment transaction
                    await mContext
                    .PaymentTransactions
                    .AddAsync(new PaymentTransactionsDataModel
                    {
                        Id              = Guid.NewGuid().ToString(),
                        Reference       = paymentRequest.Reference,
                        UserId          = user.Id,
                        PaymentVerified = false,
                        EditionId       = paymentRequest.EditionId
                    });

                    // Commit changes to the database
                    await mContext.SaveChangesAsync();

                    // Redirect to the authorised url
                    return(new PaymentResultApiModel
                    {
                        AuthorisationUrl = authorizationUrl
                    });
                }
                // Otherwise, if it was unsuccessful...
                else
                {
                    // Return error message
                    return(new PaymentResultApiModel
                    {
                        ErrorMessage = trxResult.Message
                    });
                }
            }
            catch (Exception ex)
            {
                return(new PaymentResultApiModel
                {
                    ErrorMessage = ex.Message
                });
            }
        }
        public async Task <IActionResult> VerifyPaymentAsync([FromQuery] string trxref, [FromQuery] string reference)
        {
            // Query the transaction reference
            if (string.IsNullOrEmpty(trxref))
            {
                return(Redirect("/"));
            }

            // Verify the reference id
            var clientTransaction = await mContext
                                    .PaymentTransactions
                                    .FirstOrDefaultAsync(x => x.Reference == trxref);

            // If a transaction does not exist...
            if (clientTransaction == null)
            {
                // Return unrecognized transaction
                return(View("TransactionResult", new TransactionResultDataModel
                {
                    Status = TransactionStatus.NotRecognized
                }));
            }

            // Otherwise, verify the payment status...

            // Get the transaction
            var payStack = new PayStackApi(Configuration["PayStack:SecretKey"]);
            // Get the payment status
            var paymentStatus = payStack.Transactions.Verify(trxref);

            // If the transaction was unsuccessful...
            if (!paymentStatus.Status)
            {
                // Return error response
                return(View("TransactionResult", new TransactionResultDataModel
                {
                    Status = TransactionStatus.Failed,
                    TransactionMessage = paymentStatus.Message
                }));
            }

            // Otherwise...

            // Update the payment verification status
            clientTransaction.PaymentVerified = true;
            mContext.PaymentTransactions.Update(clientTransaction);

            // Add to purchased edition
            await mContext.PurchasedEditions.AddAsync(new PurchasedEditionsDataModel
            {
                Id        = Guid.NewGuid().ToString(),
                UserId    = clientTransaction.UserId,
                EditionId = clientTransaction.EditionId
            });

            // Commit changes to database
            await mContext.SaveChangesAsync();

            // Return successful payment transaction
            return(View("TransactionResult", new TransactionResultDataModel
            {
                Status = TransactionStatus.Successful,
                TransactionMessage = paymentStatus.Message
            }));
        }
        public async Task <IActionResult> CheckPayment(ClaimHubViewModel model)
        {
            var secretKey = _paystackOptions.Value.SecretKey;

            var api = new PayStackApi(secretKey);

            //if (!string.IsNullOrEmpty(model.Transaction_reference))
            //{

            try
            {
                var verifyResponse = api.Transactions.Verify(model.Transaction_reference);
                //if (verifyResponse.Status)
                //{
                Claimer claimer = new Claimer
                {
                    HubbId      = model.HubbId,
                    Name        = model.ClaimerName,
                    Email       = model.ClaimerEmail,
                    PhoneNumber = model.PhoneNumber,
                    HubToClaim  = model.HubToClaim,
                };

                _claimerStore.Post(claimer);



                //compose  email to the admin
                var forAdmin = $"<h3>Hello admin,<h3></br> {model.ClaimerName} wants to claim {model.HubToClaim}," +
                               $"<br> Contact details: <br>" +
                               $"Email : {model.ClaimerEmail}<br>" +
                               $"Phone : {model.PhoneNumber}";
                //compose email to the claimer
                var forClaimer = $"<h3>Hello {model.ClaimerName},<h3></br> <p>Thanks for contacting us to claim {model.HubToClaim}" +
                                 $", the verification process has began , so please do expect a mail from us in 120 minutes.<br>" +
                                 $"Thanks.</p><br>" +
                                 $"Tobby from Spotahub.";



                //send email to admin
                await _emailSender.SendMail("*****@*****.**", "We have a new claimer", forAdmin);

                //send email to claimer
                await _emailSender.SendMail(model.ClaimerEmail, "Thanks for contacting us", forClaimer);

                //compose sms to claimer
                var smsClaimer = $"Hello {model.ClaimerName},Thanks for contacting us to claim {model.HubToClaim}" +
                                 $", the verification process has began , so please do expect an email from us in 120 minutes." +
                                 $"Thanks." +
                                 $"" +
                                 $"Tobby from Spotahub.";

                //send sms to claimer
                _smsSender.SendSms(smsClaimer, model.PhoneNumber);

                return(RedirectToAction("ClaimMessage"));


                //}
            }

            catch (Exception ex)
            {
                throw ex;
            }

            //}

            //return Ok(new { message = "Invalid reference" });
//
        }
 public SubAccountApi(PayStackApi api)
 {
     _api = api;
 }
Beispiel #30
0
 public TransferRecipientsApi(PayStackApi api)
 {
     _api = api;
 }