NarjisHaider
1/30/2020 - 3:25 AM

Stripe Payment Gateway

    public class StripePaymentGatewayHelper
    {
        private static PaymentClient GetTokenId(PaymentClient paymentClient)
        {
            StripeConfiguration.ApiKey = SettingsKeyInfoProvider.GetValue("StripeSecretKey");

            var myToken = new TokenCreateOptions
            {
                Card = new CreditCardOptions
                {
                    Number = paymentClient.CardNumber,
                    ExpYear = paymentClient.CardExpiryYear,
                    ExpMonth = paymentClient.CardExpiryMonth,
                    Cvc = paymentClient.CardCvc
                },
            };

            var tokenService = new TokenService();
            var stripeToken = tokenService.Create(myToken);

            if (stripeToken != null)
            {
                paymentClient.TokenId = stripeToken.Id;
            }

            return paymentClient;

        }

        private static PaymentClient ChargeCustomer(PaymentClient paymentClient)
        {
            StripeConfiguration.ApiKey = SettingsKeyInfoProvider.GetValue("StripeSecretKey");

            var myCharge = new ChargeCreateOptions
            {
                Amount = paymentClient.Amount,
                Currency = paymentClient.Currency,
                Description = paymentClient.Description,
                Source = paymentClient.TokenId,
            };

            var chargeService = new ChargeService();
            var stripeCharge = chargeService.Create(myCharge);

            if(stripeCharge != null)
            {
                paymentClient.ChargeId = stripeCharge.Id;
                paymentClient.IsPaid = stripeCharge.Paid;
                paymentClient.PaymentStatus = stripeCharge.Status;
                paymentClient.ErrorMessage = $"Failure Code: {stripeCharge.FailureCode}, Failure Message: {stripeCharge.FailureMessage}";
            }

            return paymentClient;
        }

        public static PaymentClient FinaliseBooking(PaymentClient paymentClient)
        {
            string chargeId = string.Empty;

            try
            {
                PaymentClient tokenInfo = GetTokenId(paymentClient);
                paymentClient = ChargeCustomer(tokenInfo);
            }
            catch (Exception exception)
            {
                var declaringType = MethodBase.GetCurrentMethod().DeclaringType;
                if (declaringType != null)
                    EventLogProvider.LogException(declaringType.Name,
                        MethodBase.GetCurrentMethod().Name, exception);
            }

            return paymentClient;
        }
    }