コード例 #1
0
        public async Task <IActionResult> Pay(TicketPaymentModel model)
        {
            var account = await CommonContext.CommonAccounts.Include(m => m.Partition).Where(m => m.Id == model.AccountId).SingleAsync();

            var citation = await GetCitation(account.Id, model.CitationId);

            //Create Stripe Charge
            var stripeCharge = await _stripeSvc.ChargeCardAsync(new CreditCardModel {
                Amount      = model.AmountDue,
                SourceToken = model.StripeToken
            }, citation, account, ChargeTypeEnum.PayCitation);


            //Record charge
            var payment = new CitationPayment {
                AccountId          = account.Id,
                CitationId         = citation.Id,
                CreateUserId       = citation.CreateUserId,
                UpdateUserId       = citation.CreateUserId,
                Status             = PaymentType.Stripe,
                ProcessingFee      = AppSettings.ProcessingFee,
                CitationFineAmount = citation.Balance.HasValue ? citation.Balance.Value : 0f,
                ChargeAmount       = model.AmountDue,
                ChargeId           = stripeCharge.Id
            };

            _accountCtx.CitationPayments.Add(payment);

            citation.Balance = citation.Payments.Sum(m => m.ChargeAmount) + payment.ChargeAmount;


            await _accountCtx.SaveChangesAsync();

            await _citationSvc.CreateAuditEvent(account.Id, payment.CitationId, $"{string.Format("{0:C}", model.AmountDue.PenniesToDollarAmount())} payment charged", payment.CreateUserId, Data.Enums.CitationAuditEvent.CitationSuccessPayment);

            return(RedirectToAction("PaymentComplete"));
        }