コード例 #1
0
        public PaymentResponseDto CreatePayment(Umbraco.Core.Logging.ILogger logger, string memberMandateId, string memberEmail, int costInPence, string description)
        {
            int    retries        = 5;
            int    tried          = 0;
            string idempotencyKey = Guid.NewGuid().ToString();

            return(TryCreatePayment(logger, idempotencyKey, memberMandateId, memberEmail, costInPence, description, retries, tried));
        }
コード例 #2
0
        public PaymentResponseDto TryCreatePayment(Umbraco.Core.Logging.ILogger logger, string idempotencyKey, string memberMandateId, string memberEmail,
                                                   int costInPence, string description, int retries, int tried)
        {
            if (tried >= retries)
            {
                return(PaymentResponseDto.UnknownError);
            }

            try
            {
                tried++;

                var createResponse = _client.Payments.CreateAsync(new PaymentCreateRequest()
                {
                    Amount   = costInPence,
                    Currency = PaymentCreateRequest.PaymentCurrency.GBP,
                    Links    = new PaymentCreateRequest.PaymentLinks()
                    {
                        Mandate = memberMandateId,
                    },
                    Description    = description,
                    IdempotencyKey = idempotencyKey
                }).Result;

                string message =
                    $"New CreatePayment request. memberEmail: {memberEmail}, memberMandateId: {memberMandateId}, " +
                    $"cost: {costInPence}, description: {description}";
                logger.Info(typeof(GoCardlessProvider), message);

                return(PaymentResponseDto.Success);
            }
            catch (Exception ex)
            {
                logger.Error(typeof(GoCardlessProvider), string.Format(
                                 $"Unable to CreatePayment for memberEmail: {memberEmail}, memberMandateId: {memberMandateId},, exception: {0}",
                                 ex), ex);

                var exception = ex.InnerException as ApiException;
                if (exception != null)
                {
                    var mandateErrors = new List <string>()
                    {
                        "Mandate is failed, cancelled or expired", "Mandate not found"
                    };
                    if (mandateErrors.Contains(exception.ApiErrorResponse.Error.Message))
                    {
                        return(PaymentResponseDto.MandateError);
                    }
                }

                return(TryCreatePayment(logger, idempotencyKey, memberMandateId, memberEmail, costInPence, description, retries,
                                        tried));
            }
        }
コード例 #3
0
 public XStaticDatabaseComponent(
     IScopeProvider scopeProvider,
     IMigrationBuilder migrationBuilder,
     IKeyValueService keyValueService,
     Umbraco.Core.Logging.ILogger logger)
 {
     this.scopeProvider    = scopeProvider;
     this.migrationBuilder = migrationBuilder;
     this.keyValueService  = keyValueService;
     this.logger           = logger;
 }
コード例 #4
0
            public override void AfterMigrations(IScope scope, ILogger logger)
            {
                // run post-migrations
                var originVersion = new SemVersion(0);
                var targetVersion = new SemVersion(0);

                // run post-migrations
                foreach (var postMigration in _postMigrations)
                {
                    postMigration.Execute(Name, scope, originVersion, targetVersion, logger);
                }
            }
コード例 #5
0
        public RedirectResponseDto TryCreateRedirectRequest(Umbraco.Core.Logging.ILogger logger, CustomerDto customer, RedirectFlowCreateRequest request)
        {
            try
            {
                RedirectFlowResponse redirectFlowResponse = _client.RedirectFlows.CreateAsync(request).Result;
                var redirectFlow = redirectFlowResponse.RedirectFlow;
                return(new RedirectResponseDto()
                {
                    Id = redirectFlow.Id,
                    RedirectUrl = redirectFlow.RedirectUrl
                });
            }
            catch (Exception ex)
            {
                string error = "GoCardless Error setting up mandate.";
                logger.Error(typeof(GoCardlessProvider), string.Format(
                                 $"Unable to CreateRedirectRequest for memberEmail: {customer.Email}, exception: {0}",
                                 ex), ex);

                var exception = ex.InnerException;
                if (exception != null)
                {
                    var apiException = exception as ApiException;

                    if (apiException != null)
                    {
                        var errors = JsonConvert.SerializeObject(apiException?.Errors);
                        error = $"GoCardless Error setting up mandate - {errors}";
                        logger.Warn(typeof(GoCardlessProvider), errors);
                        logger.Error(typeof(GoCardlessProvider), JsonConvert.SerializeObject(apiException), apiException);
                    }
                    else
                    {
                        logger.Error(typeof(GoCardlessProvider), $"GoCardless Error: {exception.ToString()}", exception);
                    }
                }

                if (request.PrefilledCustomer != null)
                {
                    request.PrefilledCustomer = null;
                    return(TryCreateRedirectRequest(logger, customer, request));
                }
                else
                {
                    return(new RedirectResponseDto()
                    {
                        Error = error
                    });
                }
            }
        }
コード例 #6
0
        public RedirectResponseDto CreateRedirectRequest(Umbraco.Core.Logging.ILogger logger, CustomerDto customer, string description, string sessionToken, string successUrl)
        {
            var request = new RedirectFlowCreateRequest()
            {
                Description        = description,
                SessionToken       = sessionToken,
                SuccessRedirectUrl = successUrl,
                // Optionally, prefill customer details on the payment page
                PrefilledCustomer = new RedirectFlowCreateRequest.RedirectFlowPrefilledCustomer()
                {
                    GivenName    = customer.GivenName,
                    FamilyName   = customer.FamilyName,
                    Email        = customer.Email,
                    AddressLine1 = customer.AddressLine1,
                    City         = customer.City,
                    PostalCode   = customer.PostalCode
                }
            };

            return(TryCreateRedirectRequest(logger, customer, request));
        }
コード例 #7
0
 public void Execute(IScopeProvider scopeProvider, IMigrationBuilder migrationBuilder, IKeyValueService keyValueService, ILogger logger, PostMigrationCollection postMigrations)
 {
     _postMigrations = postMigrations;
     Execute(scopeProvider, migrationBuilder, keyValueService, logger);
 }