nopSolutions/nopCommerce · error · NopException

Shipping rate computation method could not be loaded

Error message

Shipping rate computation method could not be loaded

What it means

Thrown by OrderTotalCalculationService (GetShoppingCartShippingTotal path) when no active shipping rate computation method plugin is loaded for the store/customer AND AllowPickupInStore is false. The service cannot compute a fixed shipping rate without at least one computation plugin or a pickup fallback. It is a configuration error, not a transient failure.

Source

Thrown at src/Libraries/Nop.Services/Orders/OrderTotalCalculationService.cs:1138

        var store = await _storeContext.GetCurrentStoreAsync();
        if (customer != null)
            shippingOption = await _genericAttributeService.GetAttributeAsync<ShippingOption>(customer, NopCustomerDefaults.SelectedShippingOptionAttribute, store.Id);

        if (shippingOption != null)
        {
            //use last shipping option (get from cache)
            (shippingTotal, appliedDiscounts) = await AdjustShippingRateAsync(shippingOption.Rate, cart, shippingOption.IsPickupInStore);
        }
        else
        {
            //use fixed rate (if possible)
            Address shippingAddress = null;
            if (customer != null)
                shippingAddress = await _customerService.GetCustomerShippingAddressAsync(customer);

            var shippingRateComputationMethods = await _shippingPluginManager.LoadActivePluginsAsync(await _workContext.GetCurrentCustomerAsync(), store.Id);
            if (!shippingRateComputationMethods.Any() && !_shippingSettings.AllowPickupInStore)
                throw new NopException("Shipping rate computation method could not be loaded");

            if (shippingRateComputationMethods.Count == 1)
            {
                var shippingRateComputationMethod = shippingRateComputationMethods[0];

                var shippingOptionRequests = (await _shippingService.CreateShippingOptionRequestsAsync(cart,
                    shippingAddress,
                    store.Id)).shipmentPackages;

                decimal? fixedRate = null;
                foreach (var shippingOptionRequest in shippingOptionRequests)
                {
                    //calculate fixed rates for each request-package
                    var fixedRateTmp = await shippingRateComputationMethod.GetFixedRateAsync(shippingOptionRequest);
                    if (!fixedRateTmp.HasValue)
                        continue;

                    if (!fixedRate.HasValue)

View on GitHub (pinned to 64bdf2ff08)

Solutions

  1. Install and enable at least one shipping rate computation plugin (e.g., Fixed or FixedByWeightByTotal) for the relevant store.
  2. Alternatively enable AllowPickupInStore in shipping settings so the fallback path is available.
  3. Check the plugin's LimitToStores and LimitedToRoles so it is active for the current store/customer.
  4. Verify the plugin is marked active (IsPluginActive) and its system name is registered.

Example fix

// before
var (shippingTotal, _) = await _orderTotalCalculationService.GetShoppingCartShippingTotalAsync(cart, false);

// after
var methods = await _shippingPluginManager.LoadActivePluginsAsync(customer, storeId);
if (!methods.Any() && !_shippingSettings.AllowPickupInStore)
{
    // guide the user: enable a shipping plugin or pickup-in-store
    throw new InvalidOperationException("No shipping method is configured.");
}
var (shippingTotal, _) = await _orderTotalCalculationService.GetShoppingCartShippingTotalAsync(cart, false);
Defensive patterns

Strategy: validation

Validate before calling

var methods = await _shippingPluginManager.LoadActivePluginsAsync(await _workContext.GetCurrentCustomerAsync(), store.Id);
if (!methods.Any() && !_shippingSettings.AllowPickupInStore)
{
    // guide the user: enable a shipping plugin or pickup-in-store
    throw new InvalidOperationException("No shipping method is configured.");
}

var (shippingTotal, _) = await _orderTotalCalculationService.GetShoppingCartShippingTotalAsync(cart, false);

Prevention

When it happens

Trigger: Calculating a cart's shipping total when LoadActivePluginsAsync returns no shipping rate computation methods and _shippingSettings.AllowPickupInStore is disabled. Happens on checkout/shopping-cart pages and any GetShoppingCartShippingTotalAsync call for a cart that needs shipping.

Common situations: No shipping rate computation plugin installed or enabled (e.g., Shipping.FixedByWeightByTotal disabled) and pickup-in-store turned off; plugin restricted to a specific store/customer role that excludes the current context; misconfigured LimitToStores/LimitedToRoles on the shipping plugin.

Related errors


AI-assisted analysis of nopSolutions/nopCommerce@64bdf2ff08 (2026-08-13). Data as JSON: /api/errors/47b95058e39e952f. Report an issue: GitHub.