/// <summary> /// Process a payment /// </summary> /// <param name="processPaymentRequest">Payment info required for an order processing</param> /// <returns> /// A task that represents the asynchronous operation /// The task result contains the process payment result /// </returns> public async Task <ProcessPaymentResult> ProcessPaymentAsync(ProcessPaymentRequest processPaymentRequest) { //try to get an order id from custom values var orderIdKey = await _localizationService.GetResourceAsync("Plugins.Payments.PayPalCommerce.OrderId"); if (!processPaymentRequest.CustomValues.TryGetValue(orderIdKey, out var orderId) || string.IsNullOrEmpty(orderId?.ToString())) { throw new NopException("Failed to get the PayPal order ID"); } //authorize or capture the order var(order, error) = _settings.PaymentType == PaymentType.Capture ? await _serviceManager.CaptureAsync(_settings, orderId.ToString()) : (_settings.PaymentType == PaymentType.Authorize ? await _serviceManager.AuthorizeAsync(_settings, orderId.ToString()) : (default, default));