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); }
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); }