public async Task <ActionResult> CreateOrder(VirtoCommerceDomainPaymentModelBankCardInfo bankCardInfo) { if (bankCardInfo == null) { throw new ArgumentNullException("bankCardInfo"); } EnsureThatCartExist(); //Need lock to prevent concurrent access to same cart using (var lockObject = await AsyncLock.GetLockByKey(GetAsyncLockCartKey(WorkContext.CurrentCart.Id)).LockAsync()) { var order = await _orderApi.OrderModuleCreateOrderFromCartAsync(_cartBuilder.Cart.Id); //Raise domain event await _orderPlacedEventPublisher.PublishAsync(new OrderPlacedEvent(order.ToWebModel(base.WorkContext.AllCurrencies, base.WorkContext.CurrentLanguage), _cartBuilder.Cart)); await _cartBuilder.RemoveCartAsync(); VirtoCommerceOrderModuleWebModelProcessPaymentResult processingResult = null; var incomingPayment = order.InPayments != null?order.InPayments.FirstOrDefault() : null; if (incomingPayment != null) { processingResult = await _orderApi.OrderModuleProcessOrderPaymentsAsync(bankCardInfo, order.Id, incomingPayment.Id); } return(Json(new { order = order, orderProcessingResult = processingResult })); } }
private async Task <VirtoCommerceOrderModuleWebModelProcessPaymentResult> GetOrderProcessingResultAsync( VirtoCommerceOrderModuleWebModelCustomerOrder order, VirtoCommerceDomainPaymentModelBankCardInfo bankCardInfo) { if (bankCardInfo == null) { bankCardInfo = new VirtoCommerceDomainPaymentModelBankCardInfo(); } VirtoCommerceOrderModuleWebModelProcessPaymentResult processingResult = null; var incomingPayment = order.InPayments != null?order.InPayments.FirstOrDefault() : null; if (incomingPayment != null) { processingResult = await _orderApi.OrderModuleProcessOrderPaymentsAsync(bankCardInfo, order.Id, incomingPayment.Id); } return(processingResult); }