Esempio n. 1
0
        public async Task <ActionResult <ChargeSuccessResponse> > HandleCallback()
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json");
            var     configuration = builder.Build();
            string  secretkey     = configuration["paystacksk"];
            SendSms sendsms       = new SendSms();
            ChargeSuccessResponse paystackchargesuccessresponse = new ChargeSuccessResponse();
            string answer;

            using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
            {
                answer = await reader.ReadToEndAsync();
            }

            var      jsonanswer       = (HookResponse)JsonConvert.DeserializeObject(answer, typeof(HookResponse));
            var      amt              = jsonanswer.Data.Amount.ToString();
            var      normalizedamount = amt.Insert(amt.Length - 2, ".");
            DateTime curdate          = DateTime.Parse(DateTime.UtcNow.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss"));

            //compare signature
            //var signature = jsonanswer.Data.Authorization.Signature;
            //byte[] secretkeybytes = Encoding.UTF8.GetBytes(secretkey);
            //var mysignature = HashToString(answer, secretkeybytes);

            paystackchargesuccessresponse.Event             = jsonanswer.Event;
            paystackchargesuccessresponse.Status            = jsonanswer.Data.Status;
            paystackchargesuccessresponse.Reference         = jsonanswer.Data.Reference;
            paystackchargesuccessresponse.Amount            = normalizedamount;
            paystackchargesuccessresponse.GatewayResponse   = jsonanswer.Data.GatewayResponse;
            paystackchargesuccessresponse.IPAddress         = jsonanswer.Data.IpAddress;
            paystackchargesuccessresponse.AuthorizationCode = jsonanswer.Data.Authorization.AuthorizationCode;
            paystackchargesuccessresponse.Signature         = jsonanswer.Data.Authorization.Signature;
            paystackchargesuccessresponse.Fees          = jsonanswer.Data.Fees.ToString();
            paystackchargesuccessresponse.CustomerID    = jsonanswer.Data.Customer.Id.ToString();
            paystackchargesuccessresponse.TimeofPayment = jsonanswer.Data.PaidAt.ToString();
            paystackchargesuccessresponse.Last4         = jsonanswer.Data.Authorization.Last4.ToString();
            paystackchargesuccessresponse.ExpiryMonth   = jsonanswer.Data.Authorization.ExpMonth.ToString();
            paystackchargesuccessresponse.ExpiryYear    = jsonanswer.Data.Authorization.ExpYear.ToString();
            paystackchargesuccessresponse.Bank          = jsonanswer.Data.Authorization.Bank;
            paystackchargesuccessresponse.CardType      = jsonanswer.Data.Authorization.CardType;
            paystackchargesuccessresponse.Channel       = jsonanswer.Data.Authorization.Channel;
            paystackchargesuccessresponse.CustomerCode  = jsonanswer.Data.Customer.CustomerCode;
            paystackchargesuccessresponse.CustomerID    = jsonanswer.Data.Customer.Id.ToString();
            paystackchargesuccessresponse.CustomerEmail = jsonanswer.Data.Customer.Email;
            paystackchargesuccessresponse.CountryCode   = jsonanswer.Data.Authorization.CountryCode;


            if (paystackchargesuccessresponse.Status == "success")
            {
                //save transaction to Transaction table
                DateTime    dateTime    = DateTime.Parse(DateTime.UtcNow.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss"));
                DateTime    paymentdate = DateTime.Parse(paystackchargesuccessresponse.TimeofPayment);
                Transaction transaction = new Transaction()
                {
                    TransactionStatus  = TransactionStatus.Confirmed,
                    Pspaymentreference = paystackchargesuccessresponse.Reference,
                    IPAddress          = paystackchargesuccessresponse.IPAddress,
                    Bank         = paystackchargesuccessresponse.Bank,
                    Email        = paystackchargesuccessresponse.CustomerEmail,
                    Totalamount  = Convert.ToDecimal(paystackchargesuccessresponse.Amount),
                    customercode = paystackchargesuccessresponse.CustomerCode,
                    customerid   = paystackchargesuccessresponse.CustomerID,
                    cardchannel  = paystackchargesuccessresponse.Channel,
                    cardtype     = paystackchargesuccessresponse.CardType,
                    cardlast4    = paystackchargesuccessresponse.Last4,
                    cardexpmonth = paystackchargesuccessresponse.ExpiryMonth,
                    cardexpyear  = paystackchargesuccessresponse.ExpiryYear,
                    countrycode  = paystackchargesuccessresponse.CountryCode,
                    DateModified = dateTime,
                    Paymentdate  = paymentdate,
                };
                _context.Transaction.Add(transaction);

                await _context.SaveChangesAsync();

                //update ticket table with references
                var ticketdetails = await _context.Tickets.Where(s => s.PaystackReference == paystackchargesuccessresponse.Reference).ToListAsync();

                Random generator = new Random();
                String r2;
                String r;


                var tran = await _context.Transaction.Where(s => s.Pspaymentreference == paystackchargesuccessresponse.Reference).FirstOrDefaultAsync();

                foreach (var e in ticketdetails)
                {
                    r2 = generator.Next(0, 99).ToString("D2");
                    r  = generator.Next(0, 999999).ToString("D6");
                    var ticketRef = e.Firstname.Substring(0, 1).ToUpper() + e.Lastname.Substring(0, 1).ToUpper() + r2 + DateTime.Now.ToString("ss") + r;
                    e.Ticketreference = ticketRef;
                    e.ConfirmStatus   = ConfirmStatus.Confirmed;
                    e.transactionid   = tran.Id;
                    e.Datemodified    = curdate;
                    await _tController.PutTickets(e.Id, e);
                }
                //Send email to Customers after getting all ticket references
                //ticket details
                var ticketdetails2 = await _context.Tickets.Where(s => s.PaystackReference == paystackchargesuccessresponse.Reference).ToListAsync();

                //draw details

                var drawdetails = await(from p in _context.Draws
                                        join e in _context.Items
                                        on p.Itemid equals e.Id
                                        where p.Id == ticketdetails2[0].Drawid
                                        select new
                {
                    id       = p.Id,
                    itemid   = p.Itemid,
                    drawdate = p.Drawdate,
                    itemname = e.Itemdescription
                }).FirstOrDefaultAsync();
                //normalizedate
                string sqlFormattedDate = drawdetails.drawdate.HasValue
                  ? drawdetails.drawdate.Value.ToString("dd-MMMM-yyyy")
                  : "<not available>";

                //string[] ticket = new string[ticketdetails.Count]; //List<string> TicketReferencesList = new List<string>();//foreach (var e in ticketdetails2)//{ //TicketReferencesList.Add(e.Ticketreference);//}//string[] trs = TicketReferencesList.ToArray();//send email to customer//get params

                List <string> stringofticketids = new List <string>();
                StringBuilder ticketrows        = new StringBuilder();
                int           i = 1;
                //send
                foreach (var p in ticketdetails2)
                {
                    stringofticketids.Add(p.Ticketreference);
                    ticketrows.Append("<tr><td style='padding: 0.25rem; text-align: left; border: 1px solid #ccc;'>" + i++.ToString() + "</td> <td style ='padding: 0.25rem; text-align: left; border: 1px solid #ccc;'>" + p.Ticketreference + "</td></tr>");
                }

                var    subject  = "Ticket Request Successful";
                string ticketss = String.Join(",", stringofticketids);
                var    body     = "";
                string body2    = @"<!DOCTYPE html>
                        <html>
                        <head>
                        <link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css' integrity='sha384-Zug+QiDoJOrZ5t4lssLdxGhVrurbmBWopoEl+M6BdEfwnCJZtKxi1KgxUyJq13dy' crossorigin='anonymous'>
                        </head>
                        <body style='font: normal medium/1.4 sans-serif;'>
                        <img style='display:block;width:10%;height:10%;margin-left: auto;margin-right: auto;' src='https://www.dropbox.com/s/0p1flnq0voo7hn9/oftcoftlogosmall.jpg?raw=1' alt = 'felt lucky'></a>" +
                                  "<h1 style = 'font-family: Arial, sans-serif; font-size: 185%; color:#000000;'> Congratulations!!!" + ticketdetails2[0].Firstname + "</h1>" +
                                  "<p style = 'font-family: Gill Sans, sans-serif; font-size: 160%; color:#666666;'> You have successfully entered into the National Giveaways Draw. Find draw details and ticket reference(s) below</p>" +
                                  "<p style = 'font-family: Gill Sans, sans-serif; font-size: 160%; color:#666666;'> Draw Date: " + sqlFormattedDate + "</p>" +
                                  "<p style = 'font-family: Gill Sans, sans-serif; font-size: 160%; color:#666666;'> Draw Date: " + drawdetails.itemname + "</p>" +
                                  "<p style = 'font-family: Gill Sans, sans-serif; font-size: 160%; color:#666666;'> Ticket Reference(s)</p>" +
                                  "<table style='border-collapse: collapse; width: 100%;'>" +
                                  "<tr style='background-color:#595959; color:#FFFFFF'><th style='padding: 0.25rem; text-align: left; border: 1px solid #ccc;'>S/N</th><th style='padding: 0.25rem; text-align: left; border: 1px solid #ccc;'>Ticket Reference</th></tr>" +
                                  //"<tr><td>1</td> <td> ABC12344674HH </td> </tr>" +
                                  //"<tr><td>2</td> <td> AHDN3J32K2K22 </td> </tr>" +
                                  //"<tr><td>3</td><td> AHDN3J32K2K22 </td> </tr>" +
                                  ticketrows +
                                  //
                                  "</table>" +
                                  "<p></p>" +
                                  "<a href='https://www.nationalgiveaway.com'><img style='display:block; width:100%;height:100%;' src='https://www.dropbox.com/s/medm6f3npfr4gh5/freegift.jpg?raw=1' alt = 'feeling lucky'></a>" +
                                  "</body>" +
                                  "</html>";
                //EmailSender sender = new EmailSender();
                try
                {
                    await _emailService.ExecuteAsync(ticketdetails2[0].Emailaddress, subject, body, body2);
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, ex.Message);
                }
                //send text message.
                string phone         = ticketdetails2[0].Phonenumber.Substring(1, 10);
                string completephone = "+234" + phone;
                string smsbody       = "Hi " + ticketdetails2[0].Firstname + ", you have successfully purchased a ticket for the following item: " + drawdetails.itemname + ". Draw Date: " + drawdetails.drawdate + ". Tickets: " + ticketss;
                try
                {
                    await sendsms.SendSmsMessage(completephone, smsbody);
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, ex.Message);
                }//end send sms
            }
            // DateTime curdate = DateTime.Parse(DateTime.UtcNow.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss"));
            //DateTime nigerianTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(curdate, "W. Central Africa Standard Time");s
            return(paystackchargesuccessresponse);
        }
Esempio n. 2
0
        public async Task <ActionResult <ChargeSuccessResponse> > HandleCallback()
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json");
            var    configuration = builder.Build();
            string secretkey     = configuration["paystacksk"];

            ChargeSuccessResponse paystackchargesuccessresponse = new ChargeSuccessResponse();
            string answer;

            using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
            {
                answer = await reader.ReadToEndAsync();
            }

            var jsonanswer       = (HookResponse)JsonConvert.DeserializeObject(answer, typeof(HookResponse));
            var amt              = jsonanswer.Data.Amount.ToString();
            var normalizedamount = amt.Insert(amt.Length - 2, ".");

            //compare signature
            //var signature = jsonanswer.Data.Authorization.Signature;
            //byte[] secretkeybytes = Encoding.UTF8.GetBytes(secretkey);
            //var mysignature = HashToString(answer, secretkeybytes);
            paystackchargesuccessresponse.Event             = jsonanswer.Event;
            paystackchargesuccessresponse.Status            = jsonanswer.Data.Status;
            paystackchargesuccessresponse.Reference         = jsonanswer.Data.Reference;
            paystackchargesuccessresponse.Amount            = normalizedamount;
            paystackchargesuccessresponse.GatewayResponse   = jsonanswer.Data.GatewayResponse;
            paystackchargesuccessresponse.IPAddress         = jsonanswer.Data.IpAddress;
            paystackchargesuccessresponse.AuthorizationCode = jsonanswer.Data.Authorization.AuthorizationCode;
            paystackchargesuccessresponse.Signature         = jsonanswer.Data.Authorization.Signature;
            paystackchargesuccessresponse.Fees          = jsonanswer.Data.Fees.ToString();
            paystackchargesuccessresponse.CustomerID    = jsonanswer.Data.Customer.Id.ToString();
            paystackchargesuccessresponse.TimeofPayment = jsonanswer.Data.PaidAt.ToString();
            paystackchargesuccessresponse.Last4         = jsonanswer.Data.Authorization.Last4.ToString();
            paystackchargesuccessresponse.ExpiryMonth   = jsonanswer.Data.Authorization.ExpMonth.ToString();
            paystackchargesuccessresponse.ExpiryYear    = jsonanswer.Data.Authorization.ExpYear.ToString();
            paystackchargesuccessresponse.Bank          = jsonanswer.Data.Authorization.Bank;
            paystackchargesuccessresponse.CardType      = jsonanswer.Data.Authorization.CardType;
            paystackchargesuccessresponse.Channel       = jsonanswer.Data.Authorization.Channel;
            paystackchargesuccessresponse.CustomerCode  = jsonanswer.Data.Customer.CustomerCode;
            paystackchargesuccessresponse.CustomerID    = jsonanswer.Data.Customer.Id.ToString();
            paystackchargesuccessresponse.CustomerEmail = jsonanswer.Data.Customer.Email;
            paystackchargesuccessresponse.CountryCode   = jsonanswer.Data.Authorization.CountryCode;


            if (paystackchargesuccessresponse.Status == "success")
            {
                //save transaction to Transaction table
                DateTime    dateTime    = DateTime.Parse(DateTime.UtcNow.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss"));
                DateTime    paymentdate = DateTime.Parse(paystackchargesuccessresponse.TimeofPayment);
                Transaction transaction = new Transaction()
                {
                    TransactionStatus  = TransactionStatus.Confirmed,
                    Pspaymentreference = paystackchargesuccessresponse.Reference,
                    IPAddress          = paystackchargesuccessresponse.IPAddress,
                    Bank         = paystackchargesuccessresponse.Bank,
                    Email        = paystackchargesuccessresponse.CustomerEmail,
                    Totalamount  = Convert.ToDecimal(paystackchargesuccessresponse.Amount),
                    customercode = paystackchargesuccessresponse.CustomerCode,
                    customerid   = paystackchargesuccessresponse.CustomerID,
                    cardchannel  = paystackchargesuccessresponse.Channel,
                    cardtype     = paystackchargesuccessresponse.CardType,
                    cardlast4    = paystackchargesuccessresponse.Last4,
                    cardexpmonth = paystackchargesuccessresponse.ExpiryMonth,
                    cardexpyear  = paystackchargesuccessresponse.ExpiryYear,
                    countrycode  = paystackchargesuccessresponse.CountryCode,
                    DateModified = dateTime,
                    Paymentdate  = paymentdate,
                };
                _context.Transaction.Add(transaction);

                await _context.SaveChangesAsync();

                //update ticket table with references
                var ticketdetails = await _context.Tickets.Where(s => s.PaystackReference == paystackchargesuccessresponse.Reference).ToListAsync();

                Random generator = new Random();
                String r2;
                String r;

                var tran = await _context.Transaction.Where(s => s.Pspaymentreference == paystackchargesuccessresponse.Reference).FirstOrDefaultAsync();

                foreach (var e in ticketdetails)
                {
                    r2 = generator.Next(0, 99).ToString("D2");
                    r  = generator.Next(0, 999999).ToString("D6");
                    var ticketRef = e.Firstname.Substring(0, 1).ToUpper() + e.Lastname.Substring(0, 1).ToUpper() + r2 + DateTime.Now.ToString("ss") + r;
                    e.Ticketreference = ticketRef;
                    e.ConfirmStatus   = ConfirmStatus.Confirmed;
                    e.transactionid   = tran.Id;
                    await _tController.PutTickets(e.Id, e);
                }
                //Send email to Customers after getting all ticket references
                var ticketdetails2 = await _context.Tickets.Where(s => s.PaystackReference == paystackchargesuccessresponse.Reference).ToListAsync();

                //string[] ticket = new string[ticketdetails.Count];
                //List<string> TicketReferencesList = new List<string>();
                //foreach (var e in ticketdetails2)
                //{
                //    TicketReferencesList.Add(e.Ticketreference);
                //}
                //string[] trs = TicketReferencesList.ToArray();
                //send email to customer
                //get params
                List <string> stringofticketids = new List <string>();
                StringBuilder ticketrows        = new StringBuilder();
                int           i = 1;
                //send
                foreach (var p in ticketdetails2)
                {
                    stringofticketids.Add(p.Ticketreference);
                    ticketrows.Append("<tr><td>" + i++.ToString() + "</td> <td>" + p.Ticketreference + "</td></tr>");
                }

                var    subject  = "Ticket Request Successful";
                string ticketss = String.Join(",", stringofticketids);
                var    body     = "";
                string body2    = @"<!DOCTYPE html>
                        <html>
                        <head>
                        <style>
                        </style>
                        </head>
                        <body>
                        <img style='display:block;' align='right' src='https://www.dropbox.com/s/0p1flnq0voo7hn9/oftcoftlogosmall.jpg?raw=1' alt = 'felt lucky'></a>" +
                                  "<h1 style = 'font-family: Arial, sans-serif; font-size: 250%; color:#9370DB;'> Congratulations!!!</h1>" +
                                  "<p style = 'font-family: Gill Sans, sans-serif; font-size: 160%; color:#666666;'> You have successfully entered into the National Giveaways Draw. Find draw details and ticket reference(s) below</p>" +
                                  "<p style = 'font-family: Gill Sans, sans-serif; font-size: 160%; color:#666666;'> Draw Date: 11 December 2019</p>" +
                                  "<p style = 'font-family: Gill Sans, sans-serif; font-size: 160%; color:#666666;'> Ticket Reference(s)</p>" +
                                  "<table style='border:1px solid #d9d9d9;width:50%;font-family:Gill Sans, sans-serif;text-align:left; font-size: 130%; color:#666666;'>" +
                                  "<tr style='background-color:#595959; color:#FFFFFF'><td>S/N</td><td>Ticket Reference</td></tr> " +
                                  //"<tr><td>1</td> <td> ABC12344674HH </td> </tr>" +
                                  //"<tr><td>2</td> <td> AHDN3J32K2K22 </td> </tr>" +
                                  //"<tr><td>3</td><td> AHDN3J32K2K22 </td> </tr>" +
                                  ticketrows +
                                  //
                                  "</table>" +
                                  "<p></p>" +
                                  "<a href='https://www.nationalgiveaway.com'><img style='display:block; width:100%;height:100%;' src='https://www.dropbox.com/s/medm6f3npfr4gh5/freegift.jpg?raw=1' alt = 'feeling lucky'></a>" +
                                  "</body>" +
                                  "</html>";
                EmailSender sender = new EmailSender();
                await sender.Execute2(ticketdetails2[0].Emailaddress, subject, body, body2);
            }
            DateTime curdate = DateTime.Parse(DateTime.UtcNow.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss"));

            //DateTime nigerianTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(curdate, "W. Central Africa Standard Time");s
            return(paystackchargesuccessresponse);
        }