Paddle Checkout¶
Once you have configured dj-paddle you will want to create a checkout page to process orders.
Paddle JS¶
To use Paddle checkout you need to load in Paddle JS. The easiest way to do this is to include the dj-paddle.html
template on your checkout page.:
{% include "djpaddle_paddlejs.html" %}
Note
You need to have added the djpaddle.context_processors.vendor_id
template context processor or manually add DJPADDLE_VENDOR_ID
to your context.
If you want to customise the Paddle setup you can manually add PaddleJS and Paddle.Setup
manually with:
<script src="https://cdn.paddle.com/paddle/paddle.js"></script>
<script type="text/javascript">
Paddle.Setup({
vendor: {{ DJPADDLE_VENDOR_ID }},
});
</script>
Checkout buttons¶
You can pass data to Paddle JS by add data attributes to the button. For example to set the users email you can use the data-email
attribute
<a href="#!" class="paddle_button" data-product="{{ paddle_plan.id }}" data-email="{{ user.email }}" >Buy Now!</a>
Additional data can be saved against a order / subsciption using passthrough
as the data-passthrough
attribute
<a href="#!" class="paddle_button" data-product="{{ paddle_plan.id }}" data-email="{{ user.email }}" data-passthrough='{"user_id": {{ user.pk }}, "affiliation": "Acme Corp"}'>Buy Now!</a>
See the Paddle checkout web sending additional user data page for more information.
Checkout success¶
Without writing extra javascript, Paddle’s checkout process does not give you any data back when a user completes a purchase. Paddle only sends information to your app via Webhooks. This can mean your app is unaware a purchase has happened until the Webhook is processed.
dj-paddle comes with an extra template which automatically adds very basic checkout data to the Checkout
model via an API request when the checkout process is completed. This is so you don’t have to write you own Post checkout javascript functions.
To use it you need to add the following to your template:
{% include "djpaddle_post_checkout.html" %}
This is done by automatically registering a Paddle successCallback
onto any HTML element with the paddle_button
class. `successCallback
then does an API request to a dj-paddle endpoint to save Checkout data.
Redirect after checkout¶
If you want to redirect the user after the checkout process is complete while using djpaddle_post_checkout.html
you can add a context variable called djpaddle_checkout_success_redirect
.
This will then redirect the user after the checkout data has been saved. The redirect will also include a checkout query parameter ?checkout={checkout_id}
so you can look up the checkout information on the redirected page.
Post-Checkout Order Information¶
Once the user has completed an order you app will need to find out about the order details from Paddle. There are several ways you can do this.
Note
As Paddle Post Checkout Order Information states, order processing may take a few seconds after the transaction to complete. Keep this in mind when using the below.
- Using the redirect URL above and the checkout query parameter For example:
class CheckoutSuccess(TemplateView):
template_name = 'checkout_success.html'
def get(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
checkout_id = request.GET['checkout']
# Get checkout and subscription data here
...
return self.render_to_response(context)
- Using a
post_save
receiver on theCheckout
model and using the Paddle API getorder endpoint
from djpaddle.models import Checkout, Subscription
def paddle_checkout_reciever(sender, instance, created, **kwargs):
if created:
# Get checkout and subscription data here
post_save.connect(paddle_checkout_reciever, sender=Checkout)
Keeping checkout information in sync¶
Due to Paddles checkout flow, it could be possible to miss checkout data and your system not to be in sync with Paddle. Because of this, you may want to ensure your data is in sync with Paddle.
Using the dj-paddle checkout model¶
If you have been using the djpaddle_post_checkout.html
template you should have a record of each successful checkout in the djpaddle Checkout model. This model can then be used to compare each Checkout.id
against each Subscription.checkout_id
to ensure no Webhooks have been missed.
More info and management command coming soon
Using Paddle’s Webhook history¶
Retrieving past events and alerts that Paddle has sent via webhooks using the Get Webhook History API. They should be replayed in the order they were created.
More info and management command coming soon
Other Paddle post checkout options¶
If you want to manually configure what happens after a checkout has been completed instead of using the checkout_push.html
template please see:
Note
- Subscriptions currently do not have an option within Paddle to set a redirect URL via the seller dashboard
- For normal products, using the
successCallback
ordata-success-callback
will override any success redirect set in your Seller Dashboard. This includes using thedjpaddle_post_checkout
template above - When redirecting using the
data-success
attribute (mentioned here), the redirect URL will NOT receive a checkout query parameter (checkout={checkout_hash}
). Because of this, it is not advised to use this as the redirect provides no information about the checkout that has just been completed - If you still want to use
data-success
ensure the value is set to the full URL of your application usingrequest.build_absolute_uri()