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.

v3.0.0a3 (Alpha) — This is a major rewrite that introduces a framework-agnostic core and semantic payment updates.

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 getpaid-payu 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.0a3.tar.gz (87.0 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.0a3-py3-none-any.whl (29.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: django_getpaid-3.0.0a3.tar.gz
  • Upload date:
  • Size: 87.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Manjaro Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for django_getpaid-3.0.0a3.tar.gz
Algorithm Hash digest
SHA256 a363976520e2cb029a07c044c934999baab2bb27462c5c3adff150977e2c84e8
MD5 0c77d5624f17e5957d3e0e5347c9f627
BLAKE2b-256 ebf0f5516e2f8e5ae781fc4e00ae9b0adbbb76af30b6f2068092c189d8d8e2ee

See more details on using hashes here.

File details

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

File metadata

  • Download URL: django_getpaid-3.0.0a3-py3-none-any.whl
  • Upload date:
  • Size: 29.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Manjaro Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for django_getpaid-3.0.0a3-py3-none-any.whl
Algorithm Hash digest
SHA256 6983f6086ebdd94229f19d2dadcb13c8d573cb0d2606a8966568734f22eef342
MD5 4bab192e8c475b50bc79d32d9d716f38
BLAKE2b-256 56ad4a97b211e667c065fb8cff13364bc56c00abf8acf7b14f48fa419ede6507

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