Implementing HubBox on Salesforce Commerce Cloud - SFRA

Introduction

This guide provides instructions for installing, configuring, and customizing the HubBox cartridge on your Salesforce Commerce Cloud (SFCC) storefront using the Storefront Reference Architecture (SFRA). This cartridge enables HubBox pickup point selection functionality directly within your SFCC checkout flow.

This guide focuses on SFRA. While HubBox can support older Site Genesis implementations, this requires a custom approach - please contact your HubBox representative if you are using Site Genesis.

Prerequisites:

Installation

Follow these steps to install the HubBox cartridge in your SFRA development environment.

Step 1: Obtain the HubBox Cartridge

Download the latest version of the int_hubbox_sfra cartridge .zip file.

If you cannot see a download link, please ensure you are logged in or contact your HubBox representative.

Step 2: Add Cartridge to Your Codebase

  1. Unzip the downloaded file (int_hubbox_sfra_vx.y.z.zip).
  2. Place the resulting int_hubbox_sfra folder into the cartridges directory within your SFCC project's codebase repository.

Step 3: Update Cartridge Path in Business Manager

The HubBox cartridge needs to be added to your site's cartridge path to be active. It should be placed early in the path, typically before the base storefront cartridge (app_storefront_base).

  1. Log in to Business Manager for your Sandbox instance.
  2. Navigate to Administration > Sites > Manage Sites.
  3. Select the site you want to configure (e.g., YourSite-SiteGenesis / YourSite-SFRA).
  4. Go to the Settings tab.
  5. Locate the Cartridges field.
  6. Add int_hubbox_sfra: to the beginning of the path, ensuring it's separated by colons. Example: If your path was app_storefront_base:plugin_x:plugin_y, it should become int_hubbox_sfra:app_storefront_base:plugin_x:plugin_y
  7. Click Apply.

salesforce-upload-cartridge Example Cartridge Path showing int_hubbox_sfra added

Step 4: Build & Deploy Code Changes

  1. From your project's command line interface, run your standard SFCC build process (e.g., npm run build, yarn build, or equivalent).
  2. Deploy the updated code (including the new cartridge and potentially updated build artifacts) to your Sandbox instance. Common methods include:
    • Using sgmf-scripts: npm run uploadCartridge (or yarn uploadCartridge)
    • Using SFCC UX Studio's synchronization features.
    • Using VS Code extensions like Prophet Debugger for uploads.
  3. Ensure the code upload completes successfully.

Metadata Import

The HubBox cartridge requires specific metadata objects and attributes to be imported into your SFCC instance via Business Manager. The necessary XML files are located within the cartridge/metadata folder of the int_hubbox_sfra cartridge you added.

Step 5: Import Custom Objects & Site Preferences

These files define storage for HubBox API credentials and configuration settings.

  1. In Business Manager, navigate to Administration > Site Development > Site Import & Export.
  2. Under the Import section for Meta Data, use the file uploader or select from server:
    • Upload and import HubBox.CustomObject.xml. (Purpose: Securely stores HubBox API authentication tokens).
    • Upload and import HubBox.SitePreferences.xml. (Purpose: Creates the 'HubBox Configs' custom site preference group for configuration).
  3. Ensure the import process completes without errors for both files.

salesforce-metadata Site Import & Export screen for Metadata

Step 6: Import System Object Extension (Shipment)

This file adds custom attributes to the standard SFCC Shipment object to store HubBox details.

  1. In Business Manager, stay within Administration > Site Development > Site Import & Export.
  2. Under Meta Data, upload and import HubBox.Shipment.xml.
  3. This extends the Shipment object with the following custom attributes (typically prefixed hubBox_):
    • collectPointId (String): Stores the unique ID of the selected HubBox location.
    • collectPointName (String): Stores the name of the selected HubBox location.
    • collectPointNetwork (String): Stores the network key (e.g., 'ups', 'dpd').
    • collectPointType (String): Stores the type ('public' or 'private').
  4. Ensure the import process completes successfully.

Step 7: Import Service Configuration

This file sets up the necessary HTTP service definition used by the cartridge to communicate with the HubBox API.

  1. In Business Manager, navigate to Administration > Operations > Import & Export.
  2. Under the Import section for Services, use the file uploader or select from server:
    • Upload and import HubBox.Services.xml.
  3. Ensure the import process completes successfully.

salesforce-service-upload Import & Export screen for Services

Configuration in Business Manager

After installing the cartridge and importing metadata, configure the HubBox settings for your site.

Step 8: Configure HubBox Site Preferences

  1. In Business Manager, navigate to Merchant Tools > Site Preferences > Custom Site Preference Group*.

  2. Select HubBox Configs. If this option is missing, double-check that HubBox.SitePreferences.xml was imported correctly in Step 5.

  3. Enter the required values provided by HubBox and configure the URLs according to your environment:

    Preference ID Display Name Description Source
    HubBoxEnvironment HubBox Environment Which HubBox Environemnt to connect with. All non production environments should be set to Sandbox. Production should be set to Production. Retailer provides
    HubBoxConfigId Retailer Config Id Your unique HubBox configuration ID, defining enabled networks, base styling, etc. Provided by HubBox
    HubBoxClientId HubBox API Client ID Client ID used to authenticate with HubBox API can be generated in console credential management Provided by HubBox
    HubBoxClientSecret HubBox API Client Secret Client Secret used to authenticate with HubBox API generate at same time as Client ID Provided by HubBox
  4. Click Save.

salesforce-business-manager Locating HubBox Configs in Custom Site Preferences

salesforce-business-manager2 HubBox Configuration Panel

Integration & Customization

The HubBox cartridge integrates automatically with the SFRA checkout flow however to complete the process you will need to adjust CheckoutServices PlaceOrder process.

For SFRA in {YOUR_STOREFRONT_CARTRIDGE|app_storefront_base}/controllers/CheckoutServices.js in the PlaceOrder handler locate the placeOrderResult section amend such that HubBoxHelper.placeOrder(order) is called after. Result should look like this based on the default SFRA Behavior

    ....
    // Places the order
    var placeOrderResult = COHelpers.placeOrder(order, fraudDetectionStatus);
    if (placeOrderResult.error) {
        res.json({
            error: true,
            errorMessage: Resource.msg('error.technical', 'checkout', null)
        });
        return next();
    }

    // this can be extracted to require block at top of file
    var HubBoxHelper = require('*/cartridge/scripts/helpers/HubBoxHelper');
    // This function triggers a transaction the populates the custom shipment data and address
    HubBoxHelper.placeOrder(order);
    ....

Customizating

The int_hubbox_sfra cartridge overrides the standard checkout/shipping/shipmentCard.isml template. Within this override, it includes hubbox/launch.isml, which contains the necessary frontend code (HTML placeholders, JavaScript initialization) to load and display the HubBox UI components (e.g., Toggles or Buttons for delivery choice).

If you need to heavily customize the appearance or placement beyond standard CSS, you can modify the int_hubbox_sfra/cartridge/templates/default/hubbox/launch.isml template (ensure you copy it to your custom storefront cartridge to avoid modifying the base HubBox cartridge directly, following SFRA best practices).

The HubBox UI elements are built using Web Components. You can style them using standard CSS targeting the component tags (e.g., hubbox-local-pickup-toggles) and their exposed ::part() pseudo-elements. Add your custom CSS rules to your theme's CSS files. Refer to the general HubBox Components Documentation for details on available parts and CSS variables.

The appearance and behaviour of the map/list modal widget itself (e.g., colours, map settings) are primarily controlled by the configuration associated with your configId. Minor adjustments might be possible via CSS. Refer to the Widget Configuration documentation.

Implementing Advanced Features

Product Eligibility Filtering

In some cases, you may wish to prevent the HubBox pickup option from being offered if the cart contains items unsuitable for pickup (oversized, hazardous, etc.). See Product Eligibility documentation for strategy.

This typically requires custom development within your SFCC implementation. There isn't a standard built-in feature in the HubBox cartridge for this. Common approaches include:

Shipping Rate Filtering (Recommended: Business Manager Defined)

This feature is used to show/hide specific SFCC shipping methods based on whether the customer chooses Home Delivery or HubBox Pickup. Essential if offering different rates/services or using specific carriers for pickup. See Shipping Rate Filtering documentation for strategy.

Recommended Method (BM Defined):

Uses custom attributes on Shipping Methods for flexibility.

  1. Import Metadata: Create and import a metadata XML file (or use a tool like MetaHelper) to extend the ShippingMethod system object with Boolean custom attributes (e.g., isHomeDeliveryMethod, isInstoreDeliveryMethod, isHubBoxDeliveryMethod). Group these under a custom attribute group (e.g., "HubBox Filtering").
    <?xml version="1.0" encoding="UTF-8"?>
    <metadata xmlns="[http://www.demandware.com/xml/impex/metadata/2006-10-31](http://www.demandware.com/xml/impex/metadata/2006-10-31)">
        <type-extension type-id="ShippingMethod">
            <custom-attribute-definitions>
                <attribute-definition attribute-id="isHomeDeliveryMethod">
                    <display-name xml:lang="x-default">Is Home Delivery Method?</display-name>
                    <description xml:lang="x-default">Display for standard home/alternative address delivery.</description>
                    <type>boolean</type>
                    <mandatory-flag>false</mandatory-flag>
                    <default-value>false</default-value>
                </attribute-definition>
                <attribute-definition attribute-id="isInstoreDeliveryMethod">
                    <display-name xml:lang="x-default">Is In-Store Pickup Method?</display-name>
                    <description xml:lang="x-default">Display when customer collects from your own store (BOPIS).</description>
                    <type>boolean</type>
                    <mandatory-flag>false</mandatory-flag>
                    <default-value>false</default-value>
                </attribute-definition>
                <attribute-definition attribute-id="isHubBoxDeliveryMethod">
                    <display-name xml:lang="x-default">Is HubBox Network Pickup Method?</display-name>
                    <description xml:lang="x-default">Display when customer selects a HubBox network pickup point.</description>
                    <type>boolean</type>
                    <mandatory-flag>false</mandatory-flag>
                    <default-value>false</default-value>
                </attribute-definition>
            </custom-attribute-definitions>
            <group-definitions>
                <attribute-group group-id="HubBoxFiltering">
                    <display-name xml:lang="x-default">HubBox Delivery Type Filtering</display-name>
                    <attribute attribute-id="isHomeDeliveryMethod"/>
                    <attribute attribute-id="isInstoreDeliveryMethod"/>
                    <attribute attribute-id="isHubBoxDeliveryMethod"/>
                </attribute-group>
            </group-definitions>
        </type-extension>
    </metadata>
    
  2. Configure Shipping Methods in BM: Navigate to Merchant Tools > Ordering > Shipping Methods. Edit each relevant shipping method. In the custom attributes tab (under your group, e.g., "HubBox Delivery Type Filtering"), check the one appropriate box (isHomeDeliveryMethod, isInstoreDeliveryMethod, or isHubBoxDeliveryMethod) to assign the method to that delivery type. Leave boxes unchecked if a method should not appear for that type.
  3. Cartridge Logic: The HubBox cartridge's override of ~/cartridge/scripts/checkout/shippingHelpers.js (specifically the getApplicableShippingMethods function) already contains logic to read these custom attributes. It checks if the current shipment is flagged as HubBox/Instore (using HubBoxHelper.isShipmentClickAndCollect, etc.) and filters the available shipping methods based on the corresponding is*DeliveryMethod custom attribute you set in Business Manager.
    // Simplified logic within shippingHelpers.js (Provided by int_hubbox_sfra)
    // ... finds applicable methods based on address ...
    var filteredMethods = [];
    collections.forEach(shippingMethods, function (shippingMethod) {
        var isClickAndCollect = HubBoxHelper.isShipmentClickAndCollect(shipment);
        var isHubBoxNetwork = HubBoxHelper.isShipmentHubBox(shipment);
        var isInstore = HubBoxHelper.isShipmentInstore(shipment); // Assumes BOPIS helper exists
    
        if (isClickAndCollect) {
        // Show if it's a HubBox network method OR an In-store method, matching the flags
        if ((isHubBoxNetwork && shippingMethod.custom.isHubBoxDeliveryMethod) || (isInstore && shippingMethod.custom.isInstoreDeliveryMethod)) {
            filteredMethods.push(new ShippingMethodModel(shippingMethod, shipment));
        }
        } else {
        // Show if it's flagged as a Home Delivery method
        if (shippingMethod.custom.isHomeDeliveryMethod) {
            filteredMethods.push(new ShippingMethodModel(shippingMethod, shipment));
        }
        }
        // Original logic might exist here too, e.g., related to storePickupEnabled
    });
    return filteredMethods;
    

Alternative (Software Defined - Less Flexible):

The cartridge also contains commented-out examples within shippingHelpers.js showing how to filter based on hardcoded Shipping Method IDs. This is not recommended as it's less flexible than using BM attributes.

BOPIS / Own Store Pickup (using SFCC Store Data)

You can configure HubBox to display your own physical stores (defined in SFCC Business Manager under Merchant Tools > Stores) as pickup options alongside network locations. This requires setting up a data sync.

Setup Steps:

  1. (Optional) Add Custom Attribute: To control which stores are offered for pickup, add a Boolean custom attribute (e.g., isClickAndCollectEnabled) to the Store system object definition via metadata import (similar process to Step 6/Shipping Method extension).

  2. (Optional) Configure Stores: In Merchant Tools > Stores, edit each store and check the isClickAndCollectEnabled custom attribute only for those locations that should offer BOPIS.

  3. Provide Sync URL to HubBox: The HubBox cartridge includes a controller (HubBoxStoreSync-Stores) that exposes your store data as JSON. You need to provide the secure URL for this controller on your instance (Sandbox for setup, Production for live) to your HubBox Integrations Manager.

    • URL Format: https://YOUR_INSTANCE_HOSTNAME/on/demandware.store/YOUR_SITE_ID/YOUR_LOCALE/HubBoxStoreSync-Stores (e.g., https://dev01-your-site.demandware.net/on/demandware.store/Sites-YourSite-Site/en_GB/HubBoxStoreSync-Stores)
    • Authentication: This endpoint requires Basic Authentication. Provide the corresponding username and password for your instance along with the URL.
    • SSL: If using a custom domain, ensure its SSL certificate is valid and publicly trusted.
  4. (Optional) Modify Controller for Filtering: If you added the isClickAndCollectEnabled attribute (Step 1) and want to only sync enabled stores, you (or your developer) will need to slightly modify the int_hubbox_sfra/cartridge/controllers/HubBoxStoreSync.js controller. Uncomment or adapt the filtering logic within the Stores function to check for store.custom.isClickAndCollectEnabled === true.

    // Example snippet from HubBoxStoreSync.js (Illustrative - check cartridge code)
    server.get("Stores", function (req, res, next) {
      // Original might fetch all stores: StoreMgr.getAllStores()
      // Modified to fetch only enabled stores:
      var storeList = HubBoxStoreHelper.getPickupInStoreEnabledStores(); // Assumes helper checks the custom attribute
    
      // OR filter inline:
      // var allStores = StoreMgr.getAllStores();
      // var storeList = collections.filter(allStores, function(store){
      //    return store.custom.isClickAndCollectEnabled === true;
      // });
    
      // ... rest of code maps store data to JSON ...
    
      res.json({ stores: mappedStoreList }); // Ensure correct variable is used
      return next();
    });
    

HubBox configures its systems to regularly poll the provided URL, ingest the store data, and display eligible stores within the Widget via your configId.

Amending the cartridge path

Templates

HubBox overrides the default/checkout/shipping/shipmentCard.isml template in order to include 2 HubBox templates to run the pickup UI.

<fieldset class="hubbox-toggles-block">
  <isinclude template="hubbox/launch" />
</fieldset>

Controllers

HubBox appends to the CheckoutShippingServices controller in order to pass information from the form input down to the cartridge backend.

HubBox has its own controller for toggling pickup CheckoutShippingServices-HubBox. The controller is called when HubBox is set or cleared. The two main callbacks are hubBoxPointSelectedCallback and hubBoxPointUnSelectedCallback.

Testing

Thorough testing on your Sandbox/Development instance is essential before deploying to Production.

Verification Checklist

  1. Cartridge Activation: Confirm int_hubbox_sfra is active in the correct position in the cartridge path.
  2. Metadata: Verify custom attributes exist on Shipment objects (via BM > Site > Custom Objects or inspecting Order XML) and Shipping Methods (via BM > Ordering > Shipping Methods). Verify HubBox Configs site preferences exist.
  3. Site Preferences: Double-check API credentials, URLs, and Config ID are entered correctly.
  4. Checkout UI: Load the checkout page. Does the HubBox launch experience (toggles/buttons) appear correctly?
  5. Widget Functionality: Can you open the map widget? Search for locations? Select a location?
  6. Address Population: CRITICAL: After selecting a pickup point, does the SFCC shipping address form correctly populate with the pickup location's details?
  7. Shipping Method Filtering: (If configured) Do shipping methods filter correctly when switching between Home Delivery and Pickup? Test with different cart scenarios.
  8. Place Test Orders: Complete test orders using HubBox pickup.
  9. Order XML Verification: Export the test order XML (via BM > Ordering > Orders > Export). Verify the HubBox custom attributes (collectPointId, collectPointName, etc.) are present and contain the correct data for the selected location.
  10. BOPIS Sync: (If using) Test the sync URL manually in a browser (with auth) to ensure it returns valid JSON store data. Check if stores appear correctly in the widget.
  11. Cross-Browser/Device: Test on different browsers and mobile devices/emulators.

To access HubBox's UAT guide, visit the Testing Documentation.

Going Live

  1. Final Testing: Complete final testing on a Staging instance (if available) that mirrors Production configuration.
  2. Update Site Preferences: In Production Business Manager, update the HubBoxBaseUrl and HubBoxMapUrl in Merchant Tools > Site Preferences > Custom Site Preference Groups > HubBox Configs to the Production URLs provided by HubBox.
  3. Deploy Code: Ensure the correct, tested version of your codebase (including int_hubbox_sfra in the cartridge path) is deployed to your Production environment(s).
  4. Activate: If necessary, ensure the code version containing the cartridge is activated.

The End Result & Order Data

Once installed, configured, and live, the HubBox cartridge provides the pickup point selection UI within your SFRA checkout.

When a customer selects a location the SFCC shipping address is populated with the pickup point's details. The SFCC shipping address is populated with the pickup point's details. Upon order placement, custom attributes are added to the Shipment object within the order XML, containing details about the chosen location:

<shipment shipment-id="00000001">
    <shipping-address>
       <first-name>Jane</first-name>
       <last-name>Doe</last-name>
       <address1>CVS STORE # 10043</address1>
       <city>ATLANTA</city>
       <postal-code>30303</postal-code>
       <state-code>GA</state-code>
       <country-code>US</country-code>
       <phone>9876543211</phone>
    </shipping-address>
    <custom-attributes>
        <custom-attribute attribute-id="collectPointId">U99960535</custom-attribute>
        <custom-attribute attribute-id="collectPointName">CVS STORE # 10043</custom-attribute>
        <custom-attribute attribute-id="collectPointNetwork">ups</custom-attribute>
        <custom-attribute attribute-id="collectPointType">public</custom-attribute>
        </custom-attributes>
</shipment>

This data in the Order XML is crucial for your backend systems (OMS, WMS, ERP) to identify pickup orders and for correct manifesting with the carrier.

See full DPD/UPS Order XML examples in the appendices or provided separately.

UPS Example Order XML DPD Example Order XML
<?xml version="1.0" encoding="UTF-8"?>
<orders xmlns="http://www.demandware.com/xml/impex/order/2006-10-31">
   <order order-no="00000301">
       <order-date>2021-09-17T08:54:19.444Z</order-date>
       <created-by>storefront</created-by>
       <original-order-no>00000301</original-order-no>
       <currency>USD</currency>
       <customer-locale>en_US</customer-locale>
       <taxation>net</taxation>
       <invoice-no>00001501</invoice-no>
       <customer>
           <customer-name>Jane Doe</customer-name>
           <customer-email>janedoe@test.com</customer-email>
           <billing-address>
               <first-name>Jane</first-name>
               <last-name>Doe</last-name>
               <address1>123 Main Street</address1>
               <city>ATLANTA</city>
               <postal-code>30303</postal-code>
               <state-code>OTHER</state-code>
               <country-code>US</country-code>
               <phone>07223223123</phone>
           </billing-address>
       </customer>
       <status>
           <order-status>OPEN</order-status>
           <shipping-status>NOT_SHIPPED</shipping-status>
           <confirmation-status>CONFIRMED</confirmation-status>
           <payment-status>NOT_PAID</payment-status>
       </status>
       <current-order-no>00000301</current-order-no>
       <product-lineitems>
           <product-lineitem>
               <net-price>38.00</net-price>
               <tax>1.90</tax>
               <gross-price>39.90</gross-price>
               <base-price>38.00</base-price>
               <lineitem-text>Gold Stretch Bangle</lineitem-text>
               <tax-basis>38.00</tax-basis>
               <position>1</position>
               <product-id>013742002928M</product-id>
               <product-name>Gold Stretch Bangle</product-name>
               <quantity unit="">1.0</quantity>
               <tax-rate>0.05</tax-rate>
               <shipment-id>00001501</shipment-id>
               <shipping-lineitem>
                   <net-price>10.00</net-price>
                   <tax>0.50</tax>
                   <gross-price>10.50</gross-price>
                   <base-price>10.00</base-price>
                   <lineitem-text>Item Shipping Cost (Surcharge)</lineitem-text>
                   <tax-basis>10.00</tax-basis>
                   <quantity unit="">1.0</quantity>
                   <tax-rate>0.05</tax-rate>
                   <type>surcharge</type>
               </shipping-lineitem>
               <gift>false</gift>
           </product-lineitem>
       </product-lineitems>
       <shipping-lineitems>
           <shipping-lineitem>
               <net-price>5.99</net-price>
               <tax>0.30</tax>
               <gross-price>6.29</gross-price>
               <base-price>5.99</base-price>
               <lineitem-text>Shipping</lineitem-text>
               <tax-basis>5.99</tax-basis>
               <item-id>STANDARD_SHIPPING</item-id>
               <shipment-id>00001501</shipment-id>
               <tax-rate>0.05</tax-rate>
           </shipping-lineitem>
       </shipping-lineitems>
       <shipments>
       <shipment shipment-id="00000001">
           <status>
               <shipping-status>NOT_SHIPPED</shipping-status>
           </status>
           <shipping-method>002</shipping-method>
           <shipping-address>
               <first-name>Jane</first-name>
               <last-name>Doe</last-name>
               <address1>CVS STORE # 10043</address1>
               <city>ATLANTA</city>
               <postal-code>30303</postal-code>
               <state-code>GA</state-code>
               <country-code>US</country-code>
               <phone>9876543211</phone>
           </shipping-address>
           <gift>false</gift>
           <totals>
               <merchandize-total>
                   <net-price>148.00</net-price>
                   <tax>7.40</tax>
                   <gross-price>155.40</gross-price>
               </merchandize-total>
               <adjusted-merchandize-total>
                   <net-price>148.00</net-price>
                   <tax>7.40</tax>
                   <gross-price>155.40</gross-price>
               </adjusted-merchandize-total>
               <shipping-total>
                   <net-price>11.99</net-price>
                   <tax>0.60</tax>
                   <gross-price>12.59</gross-price>
               </shipping-total>
               <adjusted-shipping-total>
                   <net-price>11.99</net-price>
                   <tax>0.60</tax>
                   <gross-price>12.59</gross-price>
               </adjusted-shipping-total>
               <shipment-total>
                   <net-price>159.99</net-price>
                   <tax>8.00</tax>
                   <gross-price>167.99</gross-price>
               </shipment-total>
           </totals>
           <custom-attributes>
               <custom-attribute attribute-id="collectPointId">U99960535</custom-attribute>
               <custom-attribute attribute-id="collectPointName">CVS STORE # 10043</custom-attribute>
               <custom-attribute attribute-id="collectPointNetwork">ups</custom-attribute>
               <custom-attribute attribute-id="collectPointType">public</custom-attribute>
           </custom-attributes>
       </shipment>
       </shipments>
       <totals>
           <merchandize-total>
               <net-price>38.00</net-price>
               <tax>1.90</tax>
               <gross-price>39.90</gross-price>
           </merchandize-total>
           <adjusted-merchandize-total>
               <net-price>38.00</net-price>
               <tax>1.90</tax>
               <gross-price>39.90</gross-price>
           </adjusted-merchandize-total>
           <shipping-total>
               <net-price>15.99</net-price>
               <tax>0.80</tax>
               <gross-price>16.79</gross-price>
           </shipping-total>
           <adjusted-shipping-total>
               <net-price>15.99</net-price>
               <tax>0.80</tax>
               <gross-price>16.79</gross-price>
           </adjusted-shipping-total>
           <order-total>
               <net-price>53.99</net-price>
               <tax>2.70</tax>
               <gross-price>56.69</gross-price>
           </order-total>
       </totals>
       <payments>
           <payment>
               <credit-card>
                   <card-type>VISA</card-type>
                   <card-number>XXXX-XXXX-XXXX-1111</card-number>
                   <card-holder>Jane Doe</card-holder>
                   <card-token>dscvse6xdkj</card-token>
                   <expiration-month>2</expiration-month>
                   <expiration-year>2025</expiration-year>
               </credit-card>
               <amount>56.69</amount>
               <processor-id>BASIC_CREDIT</processor-id>
               <transaction-id>00000301</transaction-id>
           </payment>
       </payments>
       <remoteHost>86.147.199.105</remoteHost>
   </order>
</orders>
<?xml version="1.0" encoding="UTF-8"?>
<orders xmlns="http://www.demandware.com/xml/impex/order/2006-10-31">
    <order order-no="00000301">
        <order-date>2021-09-17T08:54:19.444Z</order-date>
        <created-by>storefront</created-by>
        <original-order-no>00000301</original-order-no>
        <currency>GBP</currency>
        <customer-locale>en_GB</customer-locale>
        <taxation>net</taxation>
        <invoice-no>00001501</invoice-no>
        <customer>
            <customer-name>Jane Doe</customer-name>
            <customer-email>janedoe@test.com</customer-email>
            <billing-address>
                <first-name>Jane</first-name>
                <last-name>Doe</last-name>
                <address1>123 Test Street</address1>
                <city>London</city>
                <postal-code>SE1 9RA</postal-code>
                <state-code>OTHER</state-code>
                <country-code>GB</country-code>
                <phone>07223223123</phone>
            </billing-address>
        </customer>
        <status>
            <order-status>OPEN</order-status>
            <shipping-status>NOT_SHIPPED</shipping-status>
            <confirmation-status>CONFIRMED</confirmation-status>
            <payment-status>NOT_PAID</payment-status>
        </status>
        <current-order-no>00000301</current-order-no>
        <product-lineitems>
            <product-lineitem>
                <net-price>38.00</net-price>
                <tax>1.90</tax>
                <gross-price>39.90</gross-price>
                <base-price>38.00</base-price>
                <lineitem-text>Gold Stretch Bangle</lineitem-text>
                <tax-basis>38.00</tax-basis>
                <position>1</position>
                <product-id>013742002928M</product-id>
                <product-name>Gold Stretch Bangle</product-name>
                <quantity unit="">1.0</quantity>
                <tax-rate>0.05</tax-rate>
                <shipment-id>00001501</shipment-id>
                <shipping-lineitem>
                    <net-price>10.00</net-price>
                    <tax>0.50</tax>
                    <gross-price>10.50</gross-price>
                    <base-price>10.00</base-price>
                    <lineitem-text>Item Shipping Cost (Surcharge)</lineitem-text>
                    <tax-basis>10.00</tax-basis>
                    <quantity unit="">1.0</quantity>
                    <tax-rate>0.05</tax-rate>
                    <type>surcharge</type>
                </shipping-lineitem>
                <gift>false</gift>
            </product-lineitem>
        </product-lineitems>
        <shipping-lineitems>
            <shipping-lineitem>
                <net-price>5.99</net-price>
                <tax>0.30</tax>
                <gross-price>6.29</gross-price>
                <base-price>5.99</base-price>
                <lineitem-text>Shipping</lineitem-text>
                <tax-basis>5.99</tax-basis>
                <item-id>STANDARD_SHIPPING</item-id>
                <shipment-id>00001501</shipment-id>
                <tax-rate>0.05</tax-rate>
            </shipping-lineitem>
        </shipping-lineitems>
        <shipments>
            <shipment shipment-id="00001501">
                <status>
                    <shipping-status>NOT_SHIPPED</shipping-status>
                </status>
                <shipping-method>001</shipping-method>
                <shipping-address>
                    <first-name>Jane</first-name>
                    <last-name>Doe</last-name>
                    <address1>Snappy Snaps</address1>
                    <city>London S2SGB14496</city>
                    <postal-code>WC2E 9AX</postal-code>
                    <state-code>OTHER</state-code>
                    <country-code>GB</country-code>
                    <phone>07223223123</phone>
                </shipping-address>
                <gift>false</gift>
                <totals>
                    <merchandize-total>
                        <net-price>38.00</net-price>
                        <tax>1.90</tax>
                        <gross-price>39.90</gross-price>
                    </merchandize-total>
                    <adjusted-merchandize-total>
                        <net-price>38.00</net-price>
                        <tax>1.90</tax>
                        <gross-price>39.90</gross-price>
                    </adjusted-merchandize-total>
                    <shipping-total>
                        <net-price>15.99</net-price>
                        <tax>0.80</tax>
                        <gross-price>16.79</gross-price>
                    </shipping-total>
                    <adjusted-shipping-total>
                        <net-price>15.99</net-price>
                        <tax>0.80</tax>
                        <gross-price>16.79</gross-price>
                    </adjusted-shipping-total>
                    <shipment-total>
                        <net-price>53.99</net-price>
                        <tax>2.70</tax>
                        <gross-price>56.69</gross-price>
                    </shipment-total>
                </totals>
                <custom-attributes>
                    <custom-attribute attribute-id="collectPointId">GB14496</custom-attribute>
                    <custom-attribute attribute-id="collectPointName">Snappy Snaps</custom-attribute>
                    <custom-attribute attribute-id="collectPointNetwork">dpd</custom-attribute>
                    <custom-attribute attribute-id="collectPointType">public</custom-attribute>
                </custom-attributes>
            </shipment>
        </shipments>
        <totals>
            <merchandize-total>
                <net-price>38.00</net-price>
                <tax>1.90</tax>
                <gross-price>39.90</gross-price>
            </merchandize-total>
            <adjusted-merchandize-total>
                <net-price>38.00</net-price>
                <tax>1.90</tax>
                <gross-price>39.90</gross-price>
            </adjusted-merchandize-total>
            <shipping-total>
                <net-price>15.99</net-price>
                <tax>0.80</tax>
                <gross-price>16.79</gross-price>
            </shipping-total>
            <adjusted-shipping-total>
                <net-price>15.99</net-price>
                <tax>0.80</tax>
                <gross-price>16.79</gross-price>
            </adjusted-shipping-total>
            <order-total>
                <net-price>53.99</net-price>
                <tax>2.70</tax>
                <gross-price>56.69</gross-price>
            </order-total>
        </totals>
        <payments>
            <payment>
                <credit-card>
                    <card-type>VISA</card-type>
                    <card-number>XXXX-XXXX-XXXX-1111</card-number>
                    <card-holder>Jane Doe</card-holder>
                    <card-token>dscvse6xdkj</card-token>
                    <expiration-month>2</expiration-month>
                    <expiration-year>2025</expiration-year>
                </credit-card>
                <amount>56.69</amount>
                <processor-id>BASIC_CREDIT</processor-id>
                <transaction-id>00000301</transaction-id>
            </payment>
        </payments>
        <remoteHost>86.147.199.105</remoteHost>
    </order>
</orders>

Support

For issues during installation, configuration, or troubleshooting, please contact the HubBox Client Support or Integrations team at clientsupport@hub-box.com, providing details of your SFCC version, cartridge version, Business Manager settings, and steps to reproduce the issue.