This integrates the SendCloud API for django-SHOP version 1.0 and above.
For django-SHOP version 1.2 and later:
pip install djangoshop-sendcloud
At SendCloud create an account.
In your personal account settings, click on Settings. There:
- Add a Sender Address.
- In Financial > Direct Debit add your recurring payment settings. There your bank account is charged with € 0.01, but this may take a few hours or even one day until everything is checked.
- In Selected Shop select SendCloud API with a name of your choice. There, extract the Public Key and the Secret Key (see below).
In settings.py
of the merchant's project:
Add 'shop_sendcloud'
to INSTALLED_APPS
.
Add these two cart modifiers:
SHOP_CART_MODIFIERS = [
...
'shop_sendcloud.modifiers.SendcloudShippingModifiers',
'shop.modifiers.defaults.WeightedCartModifier',
]
Add 'shop_sendcloud.shipping.OrderWorkflowMixin'
to the list of SHOP_ORDER_WORKFLOWS
.
If you run django-SHOP with partial delivery, replace the OrderItemSerializer
with the one provided:
SHOP_ORDER_ITEM_SERIALIZER = 'shop_sendcloud.serializers.OrderItemSerializer'
and change the workflow to:
SHOP_ORDER_WORKFLOWS = [
...
'shop_sendcloud.workflows.CommonOrderWorkflowMixin',
'shop.shipping.workflows.PartialDeliveryWorkflowMixin',
]
Otherwise, without partial delivery, change the workflow to:
SHOP_ORDER_WORKFLOWS = [
...
'shop_sendcloud.workflows.SingularOrderWorkflowMixin',
'shop.shipping.workflows.CommissionGoodsWorkflowMixin',
]
Add the Public Key and the Secret Key as provided by SendCloud (see above):
SHOP_SENDCLOUD = {
'API_KEY': '<public-key-as-provided-by-SendCloud>',
'API_SECRET': '<secret-key-as-provided-by-SendCloud>',
}
Since SendClouds sets the Shipping ID for us, we disable that field in the
backend, using SHOP_MANUAL_SHIPPING_ID = False
.
SendCloud requires a specific address model, therefore ensure that you "materialize" the one
provided with djangoshop-sendcloud and not the defaults from shop/models/defaults/address
.
Typically, it's enough to import the alternative classes for BillingAddress
, ShippingAddress
and Customer
into models.py
of your merchant implementation:
from shop_sendcloud.models.address import BillingAddress, ShippingAddress
from shop_sendcloud.models.customer import Customer
Create two additional database tables as required by djangoshop-sendcloud:
python manange.py migrate djangoshop_sendcloud
Next, load all possible shipping options into your shop:
python manange.py sendcloud_import
remember to run this job on a regular basis, say once a week, to update shipping prices.
After you ran the import successfully got to admin page, and register a Sendcloud shipping address as you default address.
When django-SHOP renders the form Shipping Method inside the checkout view, additional
options will be available. For each carrier configured in the SendCloud backend, an extra radio
button appears. Whatever the customer selects, will be stored inside django-SHOP's OrderModel
.
In the Django Admin backend, only after fulfilling the order, a new button apprears named PRINT SHIPPING LABEL. Clicking on that button fetches a PDF document from the SendCloud API and forwards it to the Django Admin interface, from where it can be printed out.
Currently service points are not supported, because it involves customers select their service point and then adding that to the order. So service points will be excluded from the import and not be available as shipping method for customers.