private StartPaymentOperation PreparePaymentOperation(Order order, BarionSettings storeSetting)
        {
            PaymentType paymentType = PaymentType.Immediate;

            if (storeSetting.UseReservationPaymentType)
            {
                paymentType = PaymentType.Reservation;
            }

            var operation = new StartPaymentOperation
            {
                PayerHint        = order.BillingAddress.Email,
                GuestCheckOut    = true,
                PaymentType      = paymentType,
                FundingSources   = new[] { FundingSourceType.All },
                PaymentRequestId = Guid.NewGuid().ToString(),
                OrderNumber      = order.CustomOrderNumber,
                Currency         = GetCurrency(order.CustomerCurrencyCode),
                CallbackUrl      = storeSetting.CallbackUrl,
                Locale           = CultureInfo.GetCultureInfo(_workContext.WorkingLanguage.LanguageCulture),
                RedirectUrl      = storeSetting.RedirectUrl
            };

            if (storeSetting.UseReservationPaymentType)
            {
                operation.ReservationPeriod = TimeSpan.FromHours(storeSetting.ReservationPeriod);
            }

            return(operation);
        }
예제 #2
0
        public void BarionClient_ShouldThrowException_IfBaseUrl_IsNull()
        {
            _barionClientSettings = new BarionSettings
            {
                POSKey = Guid.Empty
            };

            Assert.Throws <ArgumentNullException>(() => new BarionClient(_barionClientSettings));
        }
예제 #3
0
 public PaymentTests()
 {
     _settings = new BarionSettings
     {
         BaseUrl = new Uri(AppSettings.BarionBaseAddress),
         POSKey  = Guid.Parse(AppSettings.BarionPOSKey),
         Payee   = AppSettings.BarionPayee
     };
 }
 public BarionClientLibrary.BarionSettings GetBarionClientSettings(BarionSettings settings)
 {
     return(new BarionClientLibrary.BarionSettings
     {
         BaseUrl = new Uri(settings.ApiUrl),
         POSKey = Guid.Parse(settings.POSKey),
         Payee = settings.BarionPayee
     });
 }
예제 #5
0
        public void BarionClient_ShouldThrowException_IfHttpClient_IsNull()
        {
            _barionClientSettings = new BarionSettings
            {
                BaseUrl = new Uri("https://api.barion.com"),
                POSKey  = Guid.Empty
            };

            Assert.Throws <ArgumentNullException>(() => new BarionClient(_barionClientSettings, null));
        }
예제 #6
0
        public void BarionClient_ShouldThrowException_IfBaseUrl_IsRelative()
        {
            _barionClientSettings = new BarionSettings
            {
                BaseUrl = new Uri("/index.html", UriKind.Relative),
                POSKey  = Guid.Empty
            };

            Assert.Throws <ArgumentException>(() => new BarionClient(_barionClientSettings));
        }
예제 #7
0
        /// <summary>Registers the type mappings with the Unity container.</summary>
        /// <param name="container">The unity container to configure.</param>
        /// <remarks>There is no need to register concrete types such as controllers or API controllers (unless you want to
        /// change the defaults), as Unity allows resolving a concrete type even if it was not previously registered.</remarks>
        public static void RegisterTypes(IUnityContainer container)
        {
            var barionSettings = new BarionSettings
            {
                BaseUrl = new Uri(WebConfigurationManager.AppSettings["BarionBaseAddress"]),
                POSKey  = new Guid(WebConfigurationManager.AppSettings["BarionPOSKey"]),
                Payee   = WebConfigurationManager.AppSettings["BarionPayee"]
            };

            container.RegisterInstance(barionSettings);
            container.RegisterType <BarionClient>();
            container.RegisterType <HttpClient>(new InjectionFactory(c => new HttpClient()));
        }
예제 #8
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var barionSettings = new BarionSettings
            {
                BaseUrl = new Uri("https://api.test.barion.com/"),
                POSKey  = Guid.Parse("d1bcff3989885d3a98235c1cd768eba2"),
                Payee   = "*****@*****.**",
            };

            services.AddSingleton(barionSettings);
            services.AddTransient <BarionClient>();
            services.AddHttpClient <BarionClient>();
            services.AddControllersWithViews();
        }
예제 #9
0
        public BarionClientTests()
        {
            _httpMessageHandler = new TestHttpMessageHandler();
            _httpClient         = new HttpClient(_httpMessageHandler);
            _retryPolicy        = new TestRetryPolicy();

            _barionClientSettings = new BarionSettings
            {
                BaseUrl = new Uri("https://api.barion.com"),
                POSKey  = Guid.NewGuid()
            };
            _barionClient = new BarionClient(_barionClientSettings, _httpClient)
            {
                RetryPolicy = _retryPolicy
            };
        }
예제 #10
0
        /// <summary>Registers the type mappings with the Unity container.</summary>
        /// <param name="container">The unity container to configure.</param>
        /// <remarks>There is no need to register concrete types such as controllers or API controllers (unless you want to
        /// change the defaults), as Unity allows resolving a concrete type even if it was not previously registered.</remarks>
        public static void RegisterTypes(IUnityContainer container)
        {
            var barionSettings = new BarionSettings
            {
                BaseUrl = new Uri(WebConfigurationManager.AppSettings["BarionBaseAddress"]),
                POSKey  = new Guid(WebConfigurationManager.AppSettings["BarionPOSKey"]),
                Payee   = WebConfigurationManager.AppSettings["BarionPayee"]
            };

            container.RegisterInstance(barionSettings);
            container.RegisterType <BarionClient>();

            // This is not the best way to use HttpClient, use the HttpClient factory pattern instead
            //     See: https://www.nuget.org/packages/Microsoft.Extensions.Http
            container.RegisterType <HttpClient>(new InjectionFactory(c => new HttpClient()));
        }
예제 #11
0
 public BarionController(BarionClient barionClient, BarionSettings barionSettings)
 {
     _barionClient   = barionClient;
     _barionSettings = barionSettings;
 }
예제 #12
0
        public static void Run()
        {
            var settings = new BarionSettings
            {
                BaseUrl = new Uri(AppSettings.BarionBaseAddress),
                POSKey  = Guid.Parse(AppSettings.BarionPOSKey),
                Payee   = AppSettings.BarionPayee
            };

            using (var barionClient = new BarionClient(settings))
            {
                var startPaymentOperation = new StartPaymentOperation
                {
                    GuestCheckOut     = true,
                    PaymentType       = PaymentType.Reservation,
                    ReservationPeriod = TimeSpan.FromDays(1),
                    FundingSources    = new[] { FundingSourceType.All },
                    PaymentRequestId  = "P1",
                    OrderNumber       = "1_0",
                    Currency          = Currency.HUF,
                    CallbackUrl       = "http://index.hu",
                    Locale            = CultureInfo.CurrentCulture,
                    RedirectUrl       = "http://index.hu"
                };

                var transaction = new PaymentTransaction
                {
                    Payee            = settings.Payee,
                    POSTransactionId = "T1",
                    Total            = new decimal(1000),
                    Comment          = "comment"
                };

                var item = new Item
                {
                    Name        = "Test",
                    Description = "Test",
                    ItemTotal   = new decimal(1000),
                    Quantity    = 1,
                    Unit        = "piece",
                    UnitPrice   = new decimal(1000),
                    SKU         = "SKU"
                };

                transaction.Items = new[] { item };
                startPaymentOperation.Transactions = new[] { transaction };

                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("Sending StartPayment...");
                var result = barionClient.ExecuteAsync <StartPaymentOperationResult>(startPaymentOperation).Result;
                Console.ResetColor();
                Console.WriteLine("StartPayment result:");
                if (result.IsOperationSuccessful)
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                }
                Console.WriteLine($"\tSuccess: {result.IsOperationSuccessful}");
                Console.WriteLine($"\tPaymentId: {result.PaymentId}");
                Console.WriteLine($"\tStatus: {result.Status}");

                Console.ResetColor();
                Console.WriteLine();
                Console.WriteLine("Starting the browser with the barion pay page.");

                System.Diagnostics.Process.Start(result.GatewayUrl);

                Console.WriteLine("Press any key to continue the flow...");
                Console.ReadKey();

                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("Sending GetPaymentState...");

                var statusOperation = new GetPaymentStateOperation();
                statusOperation.PaymentId = result.PaymentId;

                var result2 = barionClient.ExecuteAsync <GetPaymentStateOperationResult>(statusOperation).Result;

                Console.ResetColor();
                Console.WriteLine("GetPaymentState result:");
                if (result.IsOperationSuccessful)
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                }
                Console.WriteLine($"\tSuccess: {result2.IsOperationSuccessful}");
                Console.WriteLine($"\tPaymentId: {result2.PaymentId}");
                Console.WriteLine($"\tStatus: {result2.Status}");

                var finishReservation = new FinishReservationOperation();

                finishReservation.PaymentId = result2.PaymentId;

                var transactionToFinish = new TransactionToFinish();
                transactionToFinish.TransactionId = result2.Transactions.Single(t => t.POSTransactionId == "T1").TransactionId;
                transactionToFinish.Total         = 500;

                finishReservation.Transactions = new[] { transactionToFinish };

                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("Sending FinishReservation...");

                var result3 = barionClient.ExecuteAsync <FinishReservationOperationResult>(finishReservation).Result;

                Console.ResetColor();
                Console.WriteLine("FinishReservation result:");
                if (result.IsOperationSuccessful)
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                }
                Console.WriteLine($"\tSuscess: {result3.IsOperationSuccessful}");
                Console.WriteLine($"\tPaymentId: {result3.PaymentId}");
                Console.WriteLine($"\tStatus: {result3.Status}");
            }
        }
예제 #13
0
        public static StartPaymentOperationResult StartPayment(BarionClient barionClient, BarionSettings settings, PaymentType paymentType, TimeSpan?reservationPeriod = null, bool initiateRecurrence = false, string recurrenceId = null)
        {
            var startPaymentOperation = new StartPaymentOperation
            {
                GuestCheckOut      = true,
                PaymentType        = paymentType,
                ReservationPeriod  = reservationPeriod,
                FundingSources     = new[] { FundingSourceType.All },
                PaymentRequestId   = "P1",
                OrderNumber        = "1_0",
                Currency           = Currency.EUR,
                CallbackUrl        = "http://index.sk",
                Locale             = CultureInfo.CurrentCulture,
                RedirectUrl        = "http://index.sk",
                InitiateRecurrence = initiateRecurrence,
                RecurrenceId       = recurrenceId
            };

            var transaction = new PaymentTransaction
            {
                Payee            = settings.Payee,
                POSTransactionId = POSTransactionId,
                Total            = new decimal(1000),
                Comment          = "comment"
            };

            var item = new Item
            {
                Name        = "Test",
                Description = "Test",
                ItemTotal   = new decimal(1000),
                Quantity    = 1,
                Unit        = "piece",
                UnitPrice   = new decimal(1000),
                SKU         = "SKU"
            };

            transaction.Items = new[] { item };
            startPaymentOperation.Transactions = new[] { transaction };

            Console.WriteLine("Sending StartPayment...");
            var result = barionClient.ExecuteAsync <StartPaymentOperationResult>(startPaymentOperation).Result;

            if (!result.IsOperationSuccessful)
            {
                throw new Exception("Start payment operation was not successful.");
            }

            return(result);
        }
        public StartPaymentOperationResult InitPayment(BarionClientLibrary.BarionSettings transactionSettings, BarionSettings storeSetting, Order order)
        {
            /// init barion api client
            using (var api = GetApiClient(transactionSettings))
            {
                if (storeSetting.LogPaymentProcess)
                {
                    _logger.Information($"Initialize payment client for Order {order.CustomOrderNumber}");
                }

                var startPaymentOperation = PreparePaymentOperation(order, storeSetting);

                if (storeSetting.LogPaymentProcess)
                {
                    _logger.Information($"Payment method was Initialized for Order {order.CustomOrderNumber}");
                }

                var transaction = new PaymentTransaction
                {
                    Payee            = storeSetting.BarionPayee,
                    POSTransactionId = Guid.NewGuid().ToString(),
                    Total            = order.OrderTotal,
                    Comment          = string.Format(_localizationService.GetResource("Barion.Order.Comment"), order.CustomOrderNumber)
                };


                if (storeSetting.LogPaymentProcess)
                {
                    _logger.Information($"Start preparing transaction for Order {order.CustomOrderNumber}");
                }

                BarionClientLibrary.Operations.Common.Item[] orderItems = prepareTransactionOrderItems(order);

                transaction.Items = orderItems;
                startPaymentOperation.Transactions = new[] { transaction };

                if (storeSetting.LogPaymentProcess)
                {
                    _logger.Information($"Transaction was initialized for Order {order.CustomOrderNumber}");
                }

                var result = api.ExecuteAsync <StartPaymentOperationResult>(startPaymentOperation).GetAwaiter().GetResult();

                if (storeSetting.LogPaymentProcess)
                {
                    _logger.Information($"Payment was initialized on Barion API for order {order.CustomOrderNumber}");
                }

                if (result.IsOperationSuccessful)
                {
                    return(result);
                }
                else
                {
                    if (result != null && result.Errors.Count() > 0)
                    {
                        throw new Exceptions.BarionOperationResultException(_localizationService.GetResource("Barion.Order.Comment"), result.Errors.ToList());
                    }
                }
            }

            return(null);
        }