public async Task SendPaymentErrorEmailAsync(ErrorPaymentModel model) { var template = new ErrorPayment(); var text = template.TransformText(); var message = new SendGridMessage(); message.To = new[] { new MailAddress(model.Email, model.FullName) }; message.Subject = string.Format("Ошибка оплаты билета на AZUREday {0}", Configuration.Year); message.Html = text; message.From = new MailAddress(Configuration.SendGridFromEmail, Configuration.SendGridFromName); message.ReplyTo = new[] { new MailAddress(Configuration.SendGridFromEmail, Configuration.SendGridFromName) }; await SendEmail(message); }
public async Task SendPaymentErrorEmailAsync(ErrorPaymentModel model) { var template = new ErrorPayment(); var text = template.TransformText(); var message = new SendGridMessage(); message.AddTo(model.Email, model.FullName); message.Subject = $"Ошибка оплаты билета на AZUREday {Configuration.Year}"; message.HtmlContent = text; message.From = new EmailAddress(Configuration.SendGridFromEmail, Configuration.SendGridFromName); message.ReplyTo = new EmailAddress(Configuration.SendGridFromEmail, Configuration.SendGridFromName); await SendEmail(message); }
public async Task <string> PaymentConfirm([FromBody] PaymentResponse response) { var email = response.MerchantInternalUserId; var tickets = await AppFactory.TicketService.Value.GetTicketsByEmailAsync(email); if (tickets != null && tickets.Any()) { if (response.ErrorCode != 0) { var ai = new TelemetryClient(); var props = new Dictionary <string, string>(); props.Add("MerchantInternalPaymentId", response.MerchantInternalPaymentId); props.Add("MerchantInternalUserId", response.MerchantInternalUserId); props.Add("OrderId", response.OrderId.ToString()); props.Add("ErrorCode", response.ErrorCode.ToString()); props.Add("DebugMessage", response.DebugMessage); props.Add("Sum", response.Sum.ToString("F")); props.Add("OrderSum", response.OrderSum.ToString("F")); ai.TrackEvent("Payment error", props); var attendee = await AppFactory.AttendeeService.Value.GetAttendeeByEmailAsync(email); var message = new ErrorPaymentModel { Email = attendee.EMail, FullName = attendee.FullName }; await Task.WhenAll( NotificationFactory.AttendeeNotificationService.Value.SendPaymentErrorEmailAsync(message) ); } else { var attendee = await AppFactory.AttendeeService.Value.GetAttendeeByEmailAsync(email); var message = new ConfirmPaymentModel { Email = attendee.EMail, FullName = attendee.FullName }; var orderSum = response.OrderSum; var tasks = new List <Task>(); if ((decimal)tickets.Sum(x => x.Price) <= orderSum) { foreach (var ticket in tickets) { tasks.Add(AppFactory.TicketService.Value.SetTicketsPayedAsync(email, ticket.TicketType)); } tasks.Add(NotificationFactory.AttendeeNotificationService.Value.SendPaymentConfirmationEmailAsync(message)); } else { if (tickets.Count > 1) { if ((decimal)tickets[0].Price <= orderSum) { tasks.Add(AppFactory.TicketService.Value.SetTicketsPayedAsync(email, tickets[0].TicketType)); tasks.Add(NotificationFactory.AttendeeNotificationService.Value.SendPaymentConfirmationEmailAsync(message)); orderSum -= (decimal)tickets[0].Price; } if ((decimal)tickets[1].Price <= orderSum) { tasks.Add(AppFactory.TicketService.Value.SetTicketsPayedAsync(email, tickets[1].TicketType)); } else { var newPrice = (decimal)tickets[1].Price - orderSum; tasks.Add(AppFactory.TicketService.Value.UpdateTicketPriceAsync(email, tickets[1].TicketType, newPrice)); } } else { if ((decimal)tickets[0].Price <= orderSum) { tasks.Add(AppFactory.TicketService.Value.SetTicketsPayedAsync(email, tickets[0].TicketType)); tasks.Add(NotificationFactory.AttendeeNotificationService.Value.SendPaymentConfirmationEmailAsync(message)); } } } await Task.WhenAll(tasks); } } else { var ai = new TelemetryClient(); var props = new Dictionary <string, string>(); props.Add("MerchantInternalPaymentId", response.MerchantInternalPaymentId); props.Add("MerchantInternalUserId", response.MerchantInternalUserId); props.Add("OrderId", response.OrderId.ToString()); props.Add("ErrorCode", response.ErrorCode.ToString()); props.Add("DebugMessage", response.DebugMessage); props.Add("Sum", response.Sum.ToString("F")); props.Add("OrderSum", response.OrderSum.ToString("F")); ai.TrackEvent("Unable to find ticket", props); } return(string.Empty); }
public async Task<string> PaymentConfirm([FromBody]PaymentResponse response) { var email = response.MerchantInternalUserId; var ticket = await AppFactory.TicketService.Value.GetTicketByEmailAsync(email); if (ticket != null) { if (response.ErrorCode != 0) { var ai = new TelemetryClient(); var props = new Dictionary<string, string>(); props.Add("MerchantInternalPaymentId", response.MerchantInternalPaymentId); props.Add("MerchantInternalUserId", response.MerchantInternalUserId); props.Add("OrderId", response.OrderId.ToString()); props.Add("ErrorCode", response.ErrorCode.ToString()); props.Add("DebugMessage", response.DebugMessage); props.Add("Sum", response.Sum.ToString("F")); props.Add("OrderSum", response.OrderSum.ToString("F")); ai.TrackEvent("Payment error", props); var attendee = await AppFactory.AttendeeService.Value.GetAttendeeByEmailAsync(email); var message = new ErrorPaymentModel { Email = attendee.EMail, FullName = attendee.FullName }; await Task.WhenAll( AppFactory.TicketService.Value.DeleteTicketAsync(email), NotificationFactory.AttendeeNotificationService.Value.SendPaymentErrorEmailAsync(message) ); } else { var attendee = await AppFactory.AttendeeService.Value.GetAttendeeByEmailAsync(email); var message = new ConfirmPaymentModel { Email = attendee.EMail, FullName = attendee.FullName }; await Task.WhenAll( AppFactory.TicketService.Value.SetTicketPayedAsync(email), NotificationFactory.AttendeeNotificationService.Value.SendPaymentConfirmationEmailAsync(message) ); } } else { var ai = new TelemetryClient(); var props = new Dictionary<string, string>(); props.Add("MerchantInternalPaymentId", response.MerchantInternalPaymentId); props.Add("MerchantInternalUserId", response.MerchantInternalUserId); props.Add("OrderId", response.OrderId.ToString()); props.Add("ErrorCode", response.ErrorCode.ToString()); props.Add("DebugMessage", response.DebugMessage); props.Add("Sum", response.Sum.ToString("F")); props.Add("OrderSum", response.OrderSum.ToString("F")); ai.TrackEvent("Unable to find ticket", props); } return string.Empty; }