Hi
I have used the method Dynamicweb.Ecommerce.Services.Orders.Capture() to capture orders using the API. Is it also possible to cancel a not already captured but authorized order using the API?
Hi
I have used the method Dynamicweb.Ecommerce.Services.Orders.Capture() to capture orders using the API. Is it also possible to cancel a not already captured but authorized order using the API?
It depends if the checkout handler supports it. Here is a bit of code from the payments web api you can probably use.
var orderService = new OrderService(); orderService.MarkOrderAsDeleted(order); var manager = OrderManager.GetFor(order); if (manager.IsOperationSupported(OrderOperations.Cancel)) { if (order.CaptureInfo.State != OrderCaptureInfo.OrderCaptureState.Success) { TryCancel(result, manager); } else { var availableToReturn = 0.0; if (OrderReturnInfo.CheckIfOrderReturned(order, ref availableToReturn)) { TryCancel(result, manager); } else { result.Status = "Success"; result.Message = "The order has been captured, you need to process a refund first."; } } } else { result.Status = "Failed"; result.Message = "Cancel operation is not supported for specified order"; }
private void TryCancel(PaymentOperationResultModel result, OrderManager manager) { try { if (manager.CancelOrder()) { result.Status = "Success"; result.Message = "Order has been canceled successfully."; } else { result.Status = "Failed."; result.Message = "Order has not been canceled."; } } catch (Exception e) { result.Status = "Failed"; result.Message = $"Unhandled internal exception: {e.Message}"; } }
You must be logged in to post in the forum