Пример #1
0
        public void ImmediatePayment()
        {
            var barionClient = new BarionClient(_settings);

            var paymentResult = Operations.StartPayment(barionClient, _settings, PaymentType.Immediate);

            BrowserScriptRunner.RunPaymentScript(paymentResult);

            GetPaymentStateOperationResult statusresult = Operations.GetPaymentState(barionClient, paymentResult);

            Assert.Equal(PaymentStatus.Succeeded, statusresult.Status);
        }
Пример #2
0
        public void ReserveThenFinishReservation()
        {
            var barionClient = new BarionClient(_settings);

            var paymentResult = Operations.StartPayment(barionClient, _settings, PaymentType.Reservation, TimeSpan.FromDays(1));

            BrowserScriptRunner.RunPaymentScript(paymentResult);

            GetPaymentStateOperationResult beforeFinishReservationState = Operations.GetPaymentState(barionClient, paymentResult);

            Assert.Equal(PaymentStatus.Reserved, beforeFinishReservationState.Status);

            var finishReservationResult = Operations.FinishReservation(barionClient, beforeFinishReservationState);

            Assert.Equal(PaymentStatus.Succeeded, finishReservationResult.Status);
        }
Пример #3
0
        public void Capturing()
        {
            var barionClient = new BarionClient(_settings);

            var paymentResult = Operations.StartPayment(barionClient, _settings, PaymentType.DelayedCapture, TimeSpan.FromDays(1));

            BrowserScriptRunner.RunPaymentScript(paymentResult);

            GetPaymentStateOperationResult beforeCaptureState = Operations.GetPaymentState(barionClient, paymentResult);

            Assert.Equal(PaymentStatus.Authorized, beforeCaptureState.Status);

            var captureResult = Operations.CapturePayment(barionClient, beforeCaptureState);

            Assert.Equal(PaymentStatus.Succeeded, captureResult.Status);
        }
Пример #4
0
        public void Refund()
        {
            var barionClient = new BarionClient(_settings);

            var paymentResult = Operations.StartPayment(barionClient, _settings, PaymentType.Immediate);

            BrowserScriptRunner.RunPaymentScript(paymentResult);

            GetPaymentStateOperationResult beforeRefundState = Operations.GetPaymentState(barionClient, paymentResult);

            var refundResult = Operations.Refund(barionClient, paymentResult);

            Assert.Equal(1, refundResult.RefundedTransactions.Length);
            Assert.Equal("Succeeded", refundResult.RefundedTransactions[0].Status);

            GetPaymentStateOperationResult afterRefundState = Operations.GetPaymentState(barionClient, paymentResult);

            Assert.Equal(beforeRefundState.Total - refundResult.RefundedTransactions[0].Total, afterRefundState.Total);
        }
        public GetPaymentStateOperationResult GetPaymentState(BarionClientLibrary.BarionSettings transactionSettings, BarionTransaction transaction)
        {
            GetPaymentStateOperationResult statusresult = null;

            var paymentStateOperation = new GetPaymentStateOperation
            {
                PaymentId = Guid.Parse(transaction.PaymentId)
            };

            using (var api = GetApiClient(transactionSettings))
            {
                statusresult = api.ExecuteAsync <GetPaymentStateOperationResult>(paymentStateOperation).Result;
            }

            if (!statusresult.IsOperationSuccessful)
            {
                throw new Exception("Get payment state operation was not successful.");
            }

            return(statusresult);
        }
Пример #6
0
        public static CaptureOperationResult CapturePayment(BarionClient barionClient, GetPaymentStateOperationResult beforeFinishReservationState)
        {
            var capturePayment = new CaptureOperation
            {
                PaymentId = beforeFinishReservationState.PaymentId
            };

            var transactionToCapture = new TransactionToFinish
            {
                TransactionId = beforeFinishReservationState.Transactions
                                .Single(t => t.POSTransactionId == POSTransactionId).TransactionId,
                Total = 500
            };

            capturePayment.Transactions = new[] { transactionToCapture };

            Console.WriteLine("Sending Capture...");
            var captureResult = barionClient.ExecuteAsync <CaptureOperationResult>(capturePayment).Result;

            if (!captureResult.IsOperationSuccessful)
            {
                throw new Exception("Capture operation was not successful.");
            }

            return(captureResult);
        }
Пример #7
0
        public static FinishReservationOperationResult FinishReservation(BarionClient barionClient, GetPaymentStateOperationResult beforeFinishReservationState)
        {
            var finishReservation = new FinishReservationOperation();

            finishReservation.PaymentId = beforeFinishReservationState.PaymentId;

            var transactionToFinish = new TransactionToFinish();

            transactionToFinish.TransactionId = beforeFinishReservationState.Transactions.Single(t => t.POSTransactionId == POSTransactionId).TransactionId;
            transactionToFinish.Total         = 500;

            finishReservation.Transactions = new[] { transactionToFinish };

            Console.WriteLine("Sending FinishReservation...");
            var finishReservationResult = barionClient.ExecuteAsync <FinishReservationOperationResult>(finishReservation).Result;

            if (!finishReservationResult.IsOperationSuccessful)
            {
                throw new Exception("Finish reservation operation was not successful.");
            }

            return(finishReservationResult);
        }
Пример #8
0
        public IActionResult PaymentCallback(string paymentId)
        {
            if (string.IsNullOrEmpty(paymentId))
            {
                return(NotFound());
            }


            var currentStoreSettings = _settingService.LoadSetting <BarionSettings>(_storeContext.ActiveStoreScopeConfiguration);
            var transactionSettings  = _barionPaymentService.GetBarionClientSettings(currentStoreSettings);

            if (currentStoreSettings.LogPaymentProcess)
            {
                _logger.Information($"PaymentCallback was called with paymentId parameter : {paymentId}");
            }


            var transaction = _transactionService.GetTransactionByPaymentId(paymentId);

            if (transaction == null)
            {
                return(NotFound());
            }

            var order = _orderService.GetOrderById(transaction.OrderId);

            if (order == null)
            {
                return(NotFound());
            }


            GetPaymentStateOperationResult paymentState = _barionPaymentService.GetPaymentState(transactionSettings, transaction);

            if (!paymentState.IsOperationSuccessful)
            {
                _logger.Error(Newtonsoft.Json.JsonConvert.SerializeObject(paymentState.Errors));
                return(NotFound());
            }

            // save transaction state
            transaction.PaymentStatus = paymentState.Status;
            _transactionService.Update(transaction);

            if (paymentState.Status == BarionClientLibrary.Operations.Common.PaymentStatus.Succeeded)
            {
                if (currentStoreSettings.MarkOrderCompletedAfterPaid)
                {
                    _orderProcessingService.MarkOrderAsPaid(order);
                }
                else
                {
                    // change order payment state
                    order.PaymentStatus = Core.Domain.Payments.PaymentStatus.Paid;
                    _orderService.UpdateOrder(order);
                }


                var eventData = new BarionTransactionDTO
                {
                    OrderId       = order.Id,
                    OrderTotal    = order.OrderTotal,
                    PaymentId     = transaction.PaymentId,
                    PaymentStatus = (int)paymentState.Status
                };

                _eventPublisher.Publish(new TransactionApprovedEvent(eventData));
            }

            if (paymentState.Status == BarionClientLibrary.Operations.Common.PaymentStatus.Reserved)
            {
                order.PaymentStatus = Core.Domain.Payments.PaymentStatus.Authorized;
                order.OrderStatus   = Core.Domain.Orders.OrderStatus.Processing;
                _orderService.UpdateOrder(order);
            }

            return(Ok());
        }