public Task <ApiResult <ApiAlternativePaymentResponse> > CapturePaymentAsync(long paymentId, long amount,
                                                                                     ApiAlternativePaymentRequest paymentRequest, CancellationToken cancellationToken)
        {
            paymentId.ThrowIfNotCondition(id => id > 0, nameof(paymentId));
            amount.ThrowIfNotCondition(a => a > 0, nameof(amount));
            paymentRequest.ThrowIfNull(nameof(paymentRequest));
            cancellationToken.ThrowIfNull(nameof(cancellationToken));

            var uri     = GetCapturePaymentPartialUri(paymentId, amount);
            var request = paymentRequest.ToHttpRequest(HttpMethod.Post, uri);

            return(HttpClient.InvokeAsync <ApiAlternativePaymentResponse>(request, cancellationToken));
        }
        public Task <ApiResult <ApiAlternativePaymentResponse> > CreatePaymentAsync(ApiAlternativePaymentRequest paymentRequest,
                                                                                    CancellationToken cancellationToken)
        {
            paymentRequest.ThrowIfNull(nameof(paymentRequest));
            paymentRequest.Payment.ThrowIfNull(nameof(paymentRequest.Payment));
            cancellationToken.ThrowIfNull(nameof(cancellationToken));

            var validationResult = _paymentRequestValidator.Validate(paymentRequest.Payment);

            if (!validationResult.IsValid)
            {
                return(validationResult.ToValidationException().ToApiResult <ApiAlternativePaymentResponse>().ToAwaitable());
            }

            var uri     = GetPaymentUri();
            var request = paymentRequest.ToHttpRequest(HttpMethod.Post, uri);

            return(HttpClient.InvokeAsync <ApiAlternativePaymentResponse>(request, cancellationToken));
        }