Skip to main content

Shopify

The WMS integration for Shopify imports Shopify order fulfillments to the WMS for fulfillment. It registers itself as one or more fulfillment service apps within Shopify for each warehouse location orders are being fulfilled from.

Shopify's preferred workflow for order fulfillment processing is followed by the integration.

Current functionality:

  • Import Shopify fulfillment orders into WMS.
  • Update Shopify fulfillment orders with shipping details from WMS as they are processed.

Future planned functionality:

  • Shopify inventory management (which is already available in some of our Shopify apps).
info

Alternatively there's our Shopify apps available which allow Shopify store owners to onboard themselves. The apps can also handle order updates and cancellations, which this integration doesn't currently support.

Shopify Setup

The configuration steps required in Shopify to hook up order fulfillment using the integration.

Admin API

For the integration to work with the Shopify Admin API it needs to be registered as a custom app, and granted following Admin API scopes:

  • write_fulfillments, read_fulfillments
  • write_assigned_fulfillment_orders, read_assigned_fulfillment_orders
  • read_orders

The following details are required by the integration once the custom app is installed:

  • Admin API access token - revealed one time only when the app is installed (the token value starts with shpat_).
  • API secret key
  • API url - which takes the form of SHOP-NAME.myshopify.com.

Fulfillment Location

The Admin API will be used by the integration to register itself as a fulfillment service, adding an App Location within Shopify. This is a special type of location used for order fulfillment purposes.

Once the location has been registered by the integration:

  • Provide the location with shipping rates under Settings > Shipping and delivery > Shipping.
  • Give the location the relevant priority for order fulfillment location selection under Settings > Shipping and delivery > Order routing.
  • Add inventory to the location under Products.

Order Fulfillment Requests

Order fulfillment requests can either be requested manually or automatically. Most Shopify stores will prefer a hands-off automated approach.

Automatic Fulfillment

For simple scenarios where the same location is used to fulfill all orders, the Automatically fulfill the order's line items option available under Settings > General > Order processing may be sufficient.

For more fine-grained control around which orders automatically have fulfillment orders created, Shopify's own Shopify Flow app allows a simple workflow to be added to achieve this.

A simple Shopify Flow app workflow to automate fulfillment requests for a specific location where the fulfillmentOrder.assignedLocation.location.name matches the name of the fulfillment service location: Shopify Flow app workflow

This workflow *.flow file can be imported into the Shopify Flow app to create the above workflow. The fulfillmentOrder.assignedLocation.location.name value in the second condition step will need setting to the location name you want to target.

Manual Fulfillment

Manual fulfillment requests can be initiated by either opening orders individually and the Request fulfillment button used, or multiple orders can be selected from Orders and the More actions > Request fulfillment action used.

Shopify Workflow

Orders initially start with an Unfulfilled fulfillment status, changing to In progress once a fulfillment request has been made either manually or automatically.

If there are any issues importing the fulfillment order into the WMS, for example because of unknown product SKUs, then the fulfillment status will be changed to Request declined and a note added to the order detailing the problem. In these scenarios, once the issue has been resolved in either Shopify or the WMS, a manual fulfillment request can be initiated to reattempt the order import.

As orders are fulfilled the order's fulfillment status will change to Partially fulfilled and Fulfilled as relevant.

Overriding the Workflow

Occasionally you may need to manually update order fulfillment requests. Shopify provides instructions for manually cancelling, reverting and fulfilling order fulfillment requests.

Troubleshooting

Order fulfillment requests are not going to the desired location

  • Check the location has shipping rates defined for the order's destination.
  • Check that another location hasn't been given shipping order routing priority.
  • Check the location has product inventory allocated for all products being ordered.

More detail about setting up your location fulfillments in Shopify.

WMS isn't receiving orders

Check your Shopify store setup to ensure:

  1. Fulfillments have been requested for the orders. This is either done manually using the Request fulfillment action, or automatically through Shopify store configuration.
  2. Order fulfillments are being directed to the correct location, added by the integration.

This is usually caused by the shipping company name used by the WMS not being an exact match against any of the Shopify supported tracking companies.

If the shipping company names in the WMS cannot be changed to match, additional configuration can be added to map the WMS shipping company names to their Shopify equivalents.

note

For example, in New Zealand, Shopify only recognizes the local shipping company name New Zealand Post. Alternative names or variations, such as Aramex or NZ Post, are ignored during order fulfillment updates and effectively discarded by Shopify.

When the WMS is providing tracking urls but the shipping notifications are being sent without links on the tracking numbers, this will require the Shipping confirmation to be edited to remove any references to fulfillment.tracking_company in the Liquid template. This template can be found under Settings > Notifications > Order processing.

The default Shipping confirmation notification will add the tracking number link using the following Liquid template section:

{% if fulfillment.tracking_numbers.size == 1 and fulfillment.tracking_company and fulfillment.tracking_url %}
{{ fulfillment.tracking_company }} tracking number: <a href="{{ fulfillment.tracking_url }}">{{ fulfillment.tracking_numbers.first }}</a>
{% elsif fulfillment.tracking_numbers.size == 1 %}
Tracking number: {{ fulfillment.tracking_numbers.first }}
{% else %}
{{ fulfillment.tracking_company }} tracking numbers:<br />
{% for tracking_number in fulfillment.tracking_numbers %}
{% if fulfillment.tracking_urls[forloop.index0] %}
<a href="{{ fulfillment.tracking_urls[forloop.index0] }}">
{{ tracking_number }}
</a>
{% else %}
{{ tracking_number }}
{% endif %}
<br/>
{% endfor %}
{% endif %}

Removing references to fulfillment.tracking_company, this Liquid template section becomes:

{% if fulfillment.tracking_numbers.size == 1 and fulfillment.tracking_url %}
Tracking number: <a href="{{ fulfillment.tracking_url }}">{{ fulfillment.tracking_numbers.first }}</a>
{% elsif fulfillment.tracking_numbers.size == 1 %}
Tracking number: {{ fulfillment.tracking_numbers.first }}
{% else %}
Tracking numbers:<br />
{% for tracking_number in fulfillment.tracking_numbers %}
{% if fulfillment.tracking_urls[forloop.index0] %}
<a href="{{ fulfillment.tracking_urls[forloop.index0] }}">
{{ tracking_number }}
</a>
{% else %}
{{ tracking_number }}
{% endif %}
<br/>
{% endfor %}
{% endif %}

I need to manually update an order fulfillment request

Shopify provides instructions for manually cancelling, reverting and fulfilling order fulfillment requests.

WMS Setup

WMS setup instructions.