/// <summary> /// Выполнение платежа /// </summary> /// <param name="paymentByCard">Сведения о карте и сессии</param> public async Task BillPayment(PaymentByCard paymentByCard) { var paymentInfoCache = cache.GetPaymentInfo(paymentByCard.SessionId); var user = await accountService.GetCurrentUser(); var order = await orderService.AddOrder( user, paymentInfoCache, new SessionInfo() { CardNumber = paymentByCard.Card.Number, SessionId = paymentByCard.SessionId }); var earnings = await DistributeMoney(paymentInfoCache); await keystoreService.DeleteKey(paymentInfoCache.KeyDto.Id, paymentInfoCache.Game.Id); cache.RemovePaymentInfo(paymentByCard.SessionId); await smtpService.SendPurchaseNotification(paymentInfoCache); await notifierService.SendNotification(new Notification { Url = (await accountService.GetUserById(paymentInfoCache.Game.SellerId))?.NotificationUrl, Body = new SaleNotification { Order = order, Earnings = earnings, ValidationKey = GetValidationKey(order, earnings) } }); }
public async Task <IActionResult> StartPayment(PaymentByCard paymentByCard) { await paymentService.BillPayment(paymentByCard); return(new OkInfoResponse( "Спасибо за покупку! Оплата прошла успешно. Игровой ключ отправлен на Ваш Email." )); }
/// <summary> /// Выполнение платежа /// </summary> /// <param name="cardInfo">Сведения о карте</param> /// <param name="sessionId">Id сессии</param> /// <returns>Сведения о платеже</returns> public PaymentInfo BillPayment(PaymentByCard paymentByCard) { PaymentInfo paymentInfo = cache.GetPaymentInfo(paymentByCard.SessionId); bool cardNumIsValid = new Luhn().SimplifiedAlg(paymentByCard.Card); if (!cardNumIsValid) { throw new ArgumentException("Платеж не выполнен. Некорректный номер платежной карты."); } cache.RemovePaymentInfo(paymentByCard.SessionId); return(paymentInfo); }
public IActionResult Begin(PaymentByCard paymentByCard) { try { PaymentInfo paymentInfo = paymentService.BillPayment(paymentByCard); return(new OkObjectResult(new { message = "Платеж выполнен успешно.", paymentInfo })); } catch (Exception e) { return(new BadRequestObjectResult(new { e.Message })); } }