public void ChargeFailed(DateTime?eventTimestamp, StripeCharge charge)
        {
            _logger.Debug("Processing charge.failed event for charge id " + charge.Id);
            var notes = $"{charge.FailureCode ?? "No Stripe Failure Code"}: {charge.FailureMessage ?? "No Stripe Failure Message"}";

            _donationService.UpdateDonationStatus(charge.Id, _donationStatusDeclined, eventTimestamp, notes);
            _donationService.ProcessDeclineEmail(charge.Id);

            // Create a refund if it is a bank account failure
            if (charge.Source != null && "bank_account".Equals(charge.Source.Object) && charge.Refunds?.Data != null && charge.Refunds.Data.Any())
            {
                var refundData = _paymentProcessorService.GetRefund(charge.Refunds.Data[0].Id);
                _donationService.CreateDonationForBankAccountErrorRefund(new StripeRefund {
                    Data = new List <StripeRefundData> {
                        refundData
                    }
                });
            }
        }