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); }
public void BarionClient_ShouldThrowException_IfBaseUrl_IsNull() { _barionClientSettings = new BarionSettings { POSKey = Guid.Empty }; Assert.Throws <ArgumentNullException>(() => new BarionClient(_barionClientSettings)); }
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 }); }
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)); }
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)); }
/// <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())); }
// 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(); }
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 }; }
/// <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())); }
public BarionController(BarionClient barionClient, BarionSettings barionSettings) { _barionClient = barionClient; _barionSettings = barionSettings; }
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}"); } }
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); }