The spree_shipstation extension connects your Spree store with ShipStation, allowing ShipStation to pull shipments from your store, and when a shipment is sent, update the order with a tracking number and mark it as shipped.
-
Add this extension to your Gemfile with this line:
gem "spree_shipstation", github: "matthewkennedy/spree_shipstation"
-
Install the gem using Bundler
bundle install
-
Copy & run install the generator
bundle exec rails generate spree_shipstation:install
Configure your spree_shipstation Spree extension using the spree_shipstation.rb file.
# config/initializers/spree_shipstation.rb
SpreeShipstation.configure do |config|
# Choose between Grams, Ounces or Pounds.
config.weight_units = "Grams"
# ShipStation expects the endpoint to be protected by HTTP Basic Auth.
# Set the username and password you desire for ShipStation to use.
config.username = "create-a-username"
config.password = "set-a-new-password"
# Capture payment when ShipStation notifies a shipping label creation.
# Set this to `true` and `config.auto_capture_on_dispatch = true` if you
# want to charge your customers at the time of shipment.
config.capture_at_notification = false
# Export canceled shipments to ShipStation
# Set this to `true` if you want canceled shipments included in the endpoint.
config.export_canceled_shipments = false
endIf you set config.capture_at_notification = true, add the following config to spree.rb.
# config/initializers/spree.rb
Spree.config do |config|
config.auto_capture_on_dispatch = true # (Spree default is false)
endCreate a new ShipStation store by visiting: Settings -> Selling Channels -> Stores -> Add Store, then selecting the Custom Store option.
Enter the following details:
- Username: the username defined in your config.
- Password: the password defined in your config.
- URL to custom page:
https://yourdomain.com/shipstation.xml.
There are five shipment states for an order (= shipment) in ShipStation. These states do not necessarily align with Spree, but you can configure ShipStation to create a mapping for your specific needs. Here's the default mapping:
| ShipStation description | ShipStation status | Spree status |
|---|---|---|
| Awaiting Payment | unpaid |
pending |
| Awaiting Shipment | paid |
ready |
| Shipped | shipped |
shipped |
| Cancelled | cancelled |
cancelled |
| On-Hold | on-hold |
pending |
There's nothing you need to do. Once properly configured, the integration just works!
This extension works with the following Spree versions:
- 3.7.x
- 4.1.x
- 4.2.x
There are a few gotchas you need to be aware of:
- If you change the shipping method of an order in ShipStation, the change will not be reflected in Spree and the tracking link might not work properly.
- When
shipstation_capture_at_notificationis enabled, any errors during payment capture will prevent the update of the shipment's tracking number.
First bundle your dependencies:
bundleTo run the tests use:
bundle exec rakeTo check your code formatting with Standard Rb run:
bundle exec standardrbTo fix basic code formatting issues run:
bundle exec standardrb --fixCopyright (c) 2020 Matthew Kennedy, released under the New BSD License.