Skip to main content

A professional Django library for integrating Stripe payments, refunds, and subscriptions

Project description

tarxemo-django-stripe

A professional, service-oriented Django library for integrating Stripe payments, refunds, and subscriptions. This library mirrors the architecture of tarxemo-django-clickpesa to provide a consistent development experience.


Features

  • ✅ Payments (SCA Ready)
    • Easy PaymentIntent creation (for custom checkouts)
    • Full support for Stripe Checkout (hosted payment pages)
    • Automatic handling of 3DS authentication
  • ✅ Subscriptions
    • Create, update, and cancel subscriptions
    • Trial period support
    • Billing portal integration (self-service for customers)
  • ✅ Refunds
    • Full and partial refund support
    • Refund status tracking
  • ✅ Customer Management
    • Seamless mapping of Django Users to Stripe Customers
    • Shared payment methods
  • ✅ Webhooks
    • Secure signature verification
    • Idempotent processing (prevents double-processing)
    • Django Signals for all major events
  • ✅ Rich Admin Dashboard
    • View all transactions, subscriptions, and events
    • Visual status badges
    • Synchronize status with a single click

Installation

From PyPI

pip install tarxemo-django-stripe

From Source

pip install git+https://github.com/tarxemo/tarxemo-django-stripe.git

Configuration

1. Register the App

Add stripe_payments to your INSTALLED_APPS in settings.py:

INSTALLED_APPS = [
    ...
    'stripe_payments',
]

2. Configure Credentials

Add your Stripe keys to settings.py. It is recommended to use environment variables for security.

import os

# Stripe Configuration
STRIPE_PUBLISHABLE_KEY = os.getenv('STRIPE_PUBLISHABLE_KEY')
STRIPE_SECRET_KEY = os.getenv('STRIPE_SECRET_KEY')
STRIPE_WEBHOOK_SECRET = os.getenv('STRIPE_WEBHOOK_SECRET')

3. Register Webhook URL

Add the library's URLs to your project's urls.py:

from django.urls import path, include

urlpatterns = [
    ...
    path('stripe/', include('stripe_payments.urls')),
]

4. Run Migrations

python manage.py migrate stripe_payments

Core Concepts

The library follows a layered architecture to keep your code clean:

  1. Managers (High-level): Use these for 90% of your work. They handle business logic, database persistence, and emit Django signals.
    • PaymentManager
    • RefundManager
    • SubscriptionManager
    • CustomerManager
  2. Services (Low-level): Direct wrappers for the Stripe API. Use these only if you need low-level control.
  3. Signals: Decouple your app logic from payment processing by listening to events like payment_succeeded.

Usage Examples

1. Simple Payment (Checkout)

The quickest way to accept payments via a hosted Stripe page:

from stripe_payments import PaymentManager

manager = PaymentManager()
payment = manager.create_checkout_session(
    line_items=[{
        'price_data': {
            'currency': 'usd',
            'product_data': {'name': 'Luxury Watch'},
            'unit_amount': 25000, # $250.00
        },
        'quantity': 1,
    }],
    success_url='https://example.com/success?ref={CHECKOUT_SESSION_ID}',
    cancel_url='https://example.com/cancel',
    order_reference='ORDER-1001',
    user=request.user
)

# Redirect the user to use the hosted page
return redirect(payment.checkout_url)

2. Subscription Management

from stripe_payments import SubscriptionManager

manager = SubscriptionManager()

# Create subscription with trial
subscription = manager.create_subscription(
    user=request.user,
    price_id='price_standard_monthly',
    trial_period_days=14
)

# Open billing portal (for customers to manage their own plan)
portal_url = manager.get_billing_portal_url(
    user=request.user, 
    return_url='https://example.com/account'
)
return redirect(portal_url)

3. Listening for Events (Signals)

Decouple your business logic:

from django.dispatch import receiver
from stripe_payments.signals import payment_succeeded

@receiver(payment_succeeded)
def on_payment_success(sender, instance, **kwargs):
    # 'instance' is a StripePaymentTransaction model
    order_ref = instance.order_reference
    user = instance.user
    
    # Your fulfillment logic here
    fulfill_order(order_ref, user)

4. Processing Refunds

from stripe_payments import RefundManager

manager = RefundManager()
refund = manager.create_refund(
    order_reference='ORDER-1001',
    amount=50.00, # Partial refund
    reason='requested_by_customer'
)

Security Best Practices

  • Never commit keys: Always use environment variables for STRIPE_SECRET_KEY and STRIPE_WEBHOOK_SECRET.
  • Verify Signatures: This library automatically verifies all incoming webhook signatures.
  • Production Key: Ensure you use sk_live_... in production. The library will warn you if it detects a test key when DEBUG=False.

License

MIT License. See LICENSE for details. Made with ❤️ by TarXemo.

tarxemo-django-stripe

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tarxemo_django_stripe-0.1.0.tar.gz (33.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tarxemo_django_stripe-0.1.0-py3-none-any.whl (39.5 kB view details)

Uploaded Python 3

File details

Details for the file tarxemo_django_stripe-0.1.0.tar.gz.

File metadata

  • Download URL: tarxemo_django_stripe-0.1.0.tar.gz
  • Upload date:
  • Size: 33.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for tarxemo_django_stripe-0.1.0.tar.gz
Algorithm Hash digest
SHA256 580af202fe6a10dd7dd29c4b704526780f117548cdb3edba93d3d8ea4fcfe541
MD5 de4a16daacfc5671747a467a4dc122e6
BLAKE2b-256 289f968afd515c849bcec0835e6806ddaa6905e9da6ce574ddfdf685c7bca173

See more details on using hashes here.

File details

Details for the file tarxemo_django_stripe-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for tarxemo_django_stripe-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 64f01b50f05a72077e8da56cb442b3449a50206d0e8242976e35de73b97877a2
MD5 216b5868fd026cd81bb6e123c4873dcf
BLAKE2b-256 c6f204cef1246fd2f95d2cbb58b83d86b48dcc65b2f4929b93b772dab8b1405b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page