public async Task <IActionResult> Execute(string orderId, string subject, string commonId, JObject jObj)
        {
            if (jObj == null)
            {
                throw new ArgumentNullException(nameof(jObj));
            }


            ConfirmOrderLabelPurchaseCommand command = null;

            try
            {
                command = _requestBuilder.GetConfirmOrderLabelPurchase(jObj);
            }
            catch (ArgumentException ex)
            {
                var error = _responseBuilder.GetError(ErrorCodes.Request, ex.Message);
                return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error));
            }

            command.OrderId  = orderId;
            command.CommonId = commonId;
            var validationResult = await _validator.Validate(subject, command); // Validate the command.

            if (!validationResult.IsValid)
            {
                var error = _responseBuilder.GetError(ErrorCodes.Request, validationResult.Message);
                return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error));
            }

            if (validationResult.Order.OrderParcel.Transporter != Transporters.Ups) // Only UPS transport mode is supported.
            {
                var error = _responseBuilder.GetError(ErrorCodes.Request, ErrorDescriptions.TheUpsIsOnlySupported);
                return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error));
            }

            var acceptUpsShipment = await _upsClient.AcceptShip(new AcceptShipParameter // 1. Accept UPS shipment.
            {
                Credentials = new UpsCredentials
                {
                    LicenseNumber = _settingsProvider.GetUpsLicenseNumber(),
                    Password      = _settingsProvider.GetUpsPassword(),
                    UserName      = _settingsProvider.GetUpsUsername()
                },
                ShipmentDigest = validationResult.Order.ShipmentDigest
            });

            if (acceptUpsShipment.Response.ResponseStatusCode == "0")
            {
                var error = _responseBuilder.GetError(ErrorCodes.Request, acceptUpsShipment.Response.Error.ErrorDescription);
                return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error));
            }

            var order = validationResult.Order;
            var token = await _paypalOauthClient.GetAccessToken(_settingsProvider.GetPaypalClientId(), _settingsProvider.GetPaypalClientSecret(),
                                                                new PaypalOauthClientOptions
            {
                ApplicationMode = PaypalApplicationModes.sandbox
            });

            if (order.OrderPayment.PaymentMethod == OrderPayments.Paypal) // Update transaction.
            {
                var transactionId   = order.OrderPayment.TransactionId;
                var newPrice        = new JObject();
                var newPriceDetails = new JObject();
                newPriceDetails.Add("shipping", order.ShippingPrice);
                newPriceDetails.Add("subtotal", order.TotalPrice);
                newPrice.Add("total", order.TotalPrice + order.ShippingPrice);
                newPrice.Add("currency", "EUR");
                newPrice.Add("details", newPriceDetails);
                var updatePayment = await _paypalClient.UpdatePayment(transactionId, new UpdatePaymentParameter
                {
                    AccessToken = token.AccessToken,
                    JsonPatches = new[]
                    {
                        new JsonPatch
                        {
                            Operation = JsonPatchOperations.replace,
                            Path      = "/transactions/0/amount",
                            Value     = newPrice
                        }
                    }
                });

                if (!updatePayment.IsValid)
                {
                    var error = _responseBuilder.GetError(ErrorCodes.Request, updatePayment.ErrorResponse.Message);
                    return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error));
                }
            }

            var acceptedPayment = await _paypalClient.ExecutePayment(command.TransactionId, new ExecutePaymentParameter // Accept the payment.
            {
                AccessToken = token.AccessToken,
                PayerId     = command.PayerId
            });

            if (!acceptedPayment.IsValid)
            {
                await _upsClient.Cancel(acceptUpsShipment.ShipmentResults.ShipmentIdentificationNumber, new UpsCredentials
                {
                    LicenseNumber = _settingsProvider.GetUpsLicenseNumber(),
                    Password      = _settingsProvider.GetUpsPassword(),
                    UserName      = _settingsProvider.GetUpsUsername()
                });

                var error = _responseBuilder.GetError(ErrorCodes.Request, acceptedPayment.ErrorResponse.Message);
                return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error));
            }

            command.TrackingNumber = acceptUpsShipment.ShipmentResults.PackageResults.TrackingNumber;
            _commandSender.Send(command);
            return(new OkResult());
        }