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);
		}
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
		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;
		}