Skip to main content

Multi-broker payment processor for Django.

Project description

django-getpaid

PyPI version Python versions Django versions License Documentation

Multi-broker payment processing framework for Django.

django-getpaid is a flexible, modular payment processing wrapper for Django, built on the framework-agnostic getpaid-core. It allows you to integrate multiple payment gateways into your application using a unified API.

Key Features

  • Unified API: Process payments across different brokers (PayU, Paynow, BitPay, etc.) using the same logic.
  • Pluggable Architecture: Easily add new payment backends or swap existing ones.
  • Semantic Payment Flow: Robust payment status management driven by semantic payment updates and provider metadata.
  • Asynchronous Updates: Built-in support for both push (webhook) and pull (status check) notifications.
  • REST and POST Support: Handles both modern RESTful APIs and traditional POST-form redirects.
  • Swappable Models: Customize your Order and Payment models to fit your business logic (uses swapper).
  • Template Customization: Full control over payment selection and confirmation pages.
  • Type Safety: Built with modern Python types for better IDE support and reliability.

Installation

Install the package using pip:

pip install django-getpaid

Or using uv:

uv add django-getpaid

You should also install at least one payment backend, for example:

pip install python-getpaid-payu python-getpaid-paynow

Quick Start

1. Define your Order model

Subclass AbstractOrder and implement the required methods:

from django.db import models
from django.conf import settings
from getpaid.abstracts import AbstractOrder

class Order(AbstractOrder):
    amount = models.DecimalField(decimal_places=2, max_digits=8)
    currency = models.CharField(max_length=3, default="PLN")
    description = models.CharField(max_length=128)
    buyer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

    def get_total_amount(self):
        return self.amount

    def get_currency(self):
        return self.currency

    def get_buyer_info(self):
        return {"email": self.buyer.email}

    def get_description(self):
        return self.description

2. Configure Settings

Add getpaid and your chosen backends to INSTALLED_APPS and configure the models:

INSTALLED_APPS = [
    # ...
    "getpaid",
    "getpaid_payu",
    "getpaid_paynow",
    "yourapp",
]

GETPAID_ORDER_MODEL = "yourapp.Order"

# Optional: Customize the Payment model
# GETPAID_PAYMENT_MODEL = "yourapp.CustomPayment"

GETPAID_BACKEND_SETTINGS = {
    "getpaid_payu.processor.PayUProcessor": {
        "pos_id": 12345,
        "second_key": "your-second-key",
        "oauth_id": 12345,
        "oauth_secret": "your-oauth-secret",
        "sandbox": True,
    },
    "getpaid_paynow.processor.PaynowProcessor": {
        "api_key": "your-api-key",
        "signature_key": "your-signature-key",
        "sandbox": True,
    },
}

3. Add URLs

Include getpaid URLs in your project's urls.py:

from django.urls import include, path

urlpatterns = [
    # ...
    path("payments/", include("getpaid.urls")),
]

Payment Flow

  1. Order Creation: Create an instance of your Order model.
  2. Payment Selection: Present a form to the user to select a payment method (using getpaid.forms.PaymentForm).
  3. Redirection: getpaid prepares the transaction and redirects the user to the payment provider's paywall.
  4. Callback: The provider sends a notification (push) or the application checks the status (pull).
  5. State Update: The payment's status is automatically updated (e.g., to PAID or FAILED).

Template Customization

You can customize the payment selection page by overriding the getpaid/payment_form.html template. To customize the automatic redirect page (used for POST-based gateways), override getpaid/payment_post_form.html.

Example Application

The repository contains a comprehensive example application that demonstrates:

  • Integration with multiple backends (Dummy, PayU, Paynow).
  • Custom Order and Payment models.
  • Environment-based configuration.
  • Error handling and success/failure pages.

Check it out at https://github.com/django-getpaid/django-getpaid/tree/master/example/.

Ecosystem

django-getpaid is part of a larger ecosystem:

Migrating from v2

If you are upgrading from django-getpaid v2.x, please refer to our Migration Guide for a detailed list of breaking changes and step-by-step instructions.

License

This project is licensed under the MIT License.

Credits

Created by Krzysztof Dorosz. Redesigned and rewritten by Dominik Kozaczko.


This project is not affiliated with the getpaid Plone project.

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

django_getpaid-3.0.0.tar.gz (105.6 kB view details)

Uploaded Source

Built Distribution

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

django_getpaid-3.0.0-py3-none-any.whl (37.6 kB view details)

Uploaded Python 3

File details

Details for the file django_getpaid-3.0.0.tar.gz.

File metadata

  • Download URL: django_getpaid-3.0.0.tar.gz
  • Upload date:
  • Size: 105.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for django_getpaid-3.0.0.tar.gz
Algorithm Hash digest
SHA256 0a4d4cf1391f95a0c3f977120b1ac4a1412d42035431c94e9b229691b95cdf94
MD5 2a5a85784bf36f4583975880d34b4785
BLAKE2b-256 7ea987165c8e5465b91d07d7f58c7349625ac45ff25321c0468fb521872b5ba6

See more details on using hashes here.

File details

Details for the file django_getpaid-3.0.0-py3-none-any.whl.

File metadata

  • Download URL: django_getpaid-3.0.0-py3-none-any.whl
  • Upload date:
  • Size: 37.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for django_getpaid-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 56aba2acb36364fc3c9a5b72558d44a935568c08fcba4116131cafaa1f658d4f
MD5 6cc1e2bdab782db8f6ee80a7a6dfb8f6
BLAKE2b-256 fe7b939adf0d1f8970b8845f86e9557e2f0a57937acc6d087a8353322d1ce9f9

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