I am writing a payment plugin and wonder how I can get order items from within IPaymentMethod.ProcessPayment().
this.orderService.GetOrderByGuid(processPaymentRequest.OrderGuid) returns null as apparently the order isn't created until paid.
Thanks!
var customer = _customerService.GetCustomerById(processPaymentRequest.CustomerId);
if (customer == null)
throw new Exception("Customer cannot be loaded");
//get current shopping cart
var shoppingCart = customer.ShoppingCartItems
.Where(shoppingCartItem => shoppingCartItem.ShoppingCartType == ShoppingCartType.ShoppingCart)
.LimitPerStore(processPaymentRequest.StoreId).ToList();
//items
var items = GetItems(shoppingCart, customer, processPaymentRequest.StoreId, currency.CurrencyCode);
var customer = _customerService.GetCustomerById(processPaymentRequest.CustomerId);
if (customer == null)
throw new Exception("Customer cannot be loaded");
//get current shopping cart
var shoppingCart = customer.ShoppingCartItems
.Where(shoppingCartItem => shoppingCartItem.ShoppingCartType == ShoppingCartType.ShoppingCart)
.LimitPerStore(processPaymentRequest.StoreId).ToList();
//items
var items = GetItems(shoppingCart, customer, processPaymentRequest.StoreId, currency.CurrencyCode);
//Shopping Cart
var shoppingCart = (await _shoppingCartService
.GetShoppingCartAsync(await _workContext.GetCurrentCustomerAsync(), Core.Domain.Orders.ShoppingCartType.ShoppingCart, (await _storeContext.GetCurrentStoreAsync()).Id))
.ToList();
//Tax
var taxTotal = Math.Round((await _orderTotalCalculationService.GetTaxTotalAsync(shoppingCart, false)).taxTotal, 2);
//Shipping Total
var shippingTotal = Math.Round(await _orderTotalCalculationService.GetShoppingCartShippingTotalAsync(shoppingCart) ?? decimal.Zero, 2);
//Order Total
var orderTotal = Math.Round((await _orderTotalCalculationService.GetShoppingCartTotalAsync(shoppingCart, usePaymentMethodAdditionalFee: false)).shoppingCartTotal ?? decimal.Zero, 2);