# django-paddle Django models and helpers for integrating Paddle.com subscriptions with your Django app ⚠️This library is very much **WORK IN PROGRESS**, please read this document carefully to understand what is currently supported. Currently this package includes: * Django Models for plans, plan prices, subscriptions, payments (invoices) * Django management commands for sycing plans, subscriptions, payments * Webhook receivers that handle subscription creation, subscription cancellation ### Installation Requires: * Python 3.6+ * Django 2.1.0+ 1. Install the `django-paddle` package ``` pip install django-paddle ``` 2. Add `django_paddle` to your INSTALLED_APPS ```python INSTALLED_APPS = [ # ... 'django_paddle', # ... ] ``` 3. In your `settings.py` add the following settings: ```python PADDLE_VENDOR_ID = 'your-vendor-id-here' # https://vendors.paddle.com/authentication PADDLE_AUTH_CODE = 'your-auth-code-here' # https://vendors.paddle.com/authentication PADDLE_PUBLIC_KEY = """-----BEGIN PUBLIC KEY----- your public key here -----END PUBLIC KEY-----""" # https://vendors.paddle.com/public-key PADDLE_ACCOUNT_MODEL = 'auth.User' ``` ℹ️ If you are using the default Django User model, set `PADDLE_ACCOUNT_MODEL` to `auth.User`. If you are using a custom User model set this to something like `your_custom_app.YourUserModel`. 5. In your projects main `urls.py` add the `django_paddle` URLs for receiving webhooks: ```python urlpatterns = [ path('', include('django_paddle.urls')), ] ``` ℹ️ This will result in an absolute webhook URL `https://example.com/webhook`. Make sure this is the Webhook URL you set in your Paddle settings (https://vendors.paddle.com/alerts-webhooks). 4. Run migrations `python manage.py migrate` The User Model specified in `PADDLE_ACCOUNT_MODEL` will now have a back-reference to the PaddleSubscription and vice versa. Example: ```python sub = PaddleSubscription.objects.all()[0] print(sub.account) # ``` or ```python user = User.objects.get(username='johndoe@example.com') print(u.subscriptions.all()) # ]> ``` 5. Done! ### Automatically connecting Users and Subscriptions We need a shared identifier between the User model and the PaddleSubscription model. This needs to be provided when we redirect a user to the Paddle checkout. If you are using the default Django User model you can provide a unique user ID as a passthrough value. The `subscription_created` webook will check the passtrough field and see if a User with this ID exists and automatically connect it to the newly created subscription. Example: ```html ``` ### Django Management Commands * `manage.py paddle_sync_plans` - Syncs Subscription Plans * `manage.py paddle_sync_subscriptions` - Syncs Subscriptions * `manage.py paddle_sync_payments` - Syncs payments for all subscriptions ### Run tests ``` python runtests.py ```