/// <summary> /// Process a payment /// </summary> /// <param name="processPaymentRequest">Payment info required for an order processing</param> /// <returns>Process payment result</returns> public ProcessPaymentResult ProcessPayment(ProcessPaymentRequest processPaymentRequest) { var result = new ProcessPaymentResult(); TokenResponse tokenResponse = null; PaymentExecutionResponse paymentExecutionResponse = null; var storeScope = GetActiveStoreScopeConfiguration(_storeService, _workContext); var payPalPlusBrasilPaymentSettings = _settingService.LoadSetting <PayPalPlusBrasilPaymentSettings>(storeScope); string username = payPalPlusBrasilPaymentSettings.RestAPIClientId; string password = payPalPlusBrasilPaymentSettings.RestAPISecrect; var payerIdPayPal = processPaymentRequest.CustomValues["PayerIdPayPal"].ToString(); var paymentIdPayPal = processPaymentRequest.CustomValues["PaymentIdPayPal"].ToString(); var paymentCreationMessage = new PaymentCreationMessage() { PayerId = payerIdPayPal }; using (var token = new Token(payPalPlusBrasilPaymentSettings.UseSandbox)) { tokenResponse = token.CreateAsync(username, password).ConfigureAwait(false).GetAwaiter().GetResult(); } using (var paymentExecution = new PaymentExecution(payPalPlusBrasilPaymentSettings.UseSandbox)) { paymentExecutionResponse = paymentExecution.CreateAsync(paymentCreationMessage, paymentIdPayPal, tokenResponse.AcessToken).ConfigureAwait(false).GetAwaiter().GetResult(); } SalePaymentExecution SalePaymentExecution = GetSalePaymentExecution(paymentExecutionResponse); string stateExecution = SalePaymentExecution.State; if (stateExecution == "completed") { result.AuthorizationTransactionId = SalePaymentExecution.Id; result.NewPaymentStatus = PaymentStatus.Paid; } else { result.AuthorizationTransactionId = SalePaymentExecution.Id; result.NewPaymentStatus = PaymentStatus.Pending; } return(result); }
private SalePaymentExecution GetSalePaymentExecution(PaymentExecutionResponse executionResponse) { return(executionResponse.Transactions[0].RelatedResources[0].Sale); }