Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/django-getpaid/django-getpaid

Django payments processor.
https://github.com/django-getpaid/django-getpaid

django payments python

Last synced: 11 days ago
JSON representation

Django payments processor.

Awesome Lists containing this project

README

        

.. image:: https://img.shields.io/pypi/v/django-getpaid.svg
:target: https://pypi.org/project/django-getpaid/
:alt: Latest PyPI version
.. image:: https://github.com/django-getpaid/django-getpaid/actions/workflows/run_tox.yml/badge.svg
:target: https://github.com/django-getpaid/django-getpaid/actions/
.. image:: https://img.shields.io/pypi/wheel/django-getpaid.svg
:target: https://pypi.org/project/django-getpaid/
.. image:: https://img.shields.io/pypi/l/django-getpaid.svg
:target: https://pypi.org/project/django-getpaid/

=============================
Welcome to django-getpaid
=============================

django-getpaid is payment processing framework for Django

Documentation
=============

The full documentation is at https://django-getpaid.readthedocs.io.

Features
========

* support for multiple payment brokers at the same time
* very flexible architecture
* support for asynchronous status updates - both push and pull
* support for modern REST-based broker APIs
* support for multiple currencies (but one per payment)
* support for global and per-plugin validators
* easy customization with provided base abstract models and swappable mechanic (same as with Django's User model)

Quickstart
==========

Install django-getpaid and at least one payment backend:

.. code-block:: console

pip install django-getpaid
pip install django-getpaid-payu

Define an ``Order`` model by subclassing ``getpaid.abstracts.AbstractOrder``
and define some required methods:

.. code-block:: python

from getpaid.abstracts import AbstractOrder

class MyCustomOrder(AbstractOrder):
amount = models.DecimalField(decimal_places=2, max_digits=8)
description = models.CharField(max_length=128)
buyer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

def get_absolute_url(self):
return reverse('order-detail', kwargs={"pk": self.pk})

def get_total_amount(self):
return self.amount

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

def get_currency(self):
return "EUR"

def get_description(self):
return self.description

.. note:: If you already have an Order model and don't want to subclass ``AbstractOrder``
just make sure you implement all methods.

Inform getpaid of your Order model in ``settings.py`` and provide settings for payment backends:

.. code-block:: python

GETPAID_ORDER_MODEL = 'yourapp.MyCustomOrder'

GETPAID_BACKEND_SETTINGS = {
"getpaid_payu": {
# take these from your merchant panel:
"pos_id": 12345,
"second_key": "91ae651578c5b5aa93f2d38a9be8ce11",
"oauth_id": 12345,
"oauth_secret": "12f071174cb7eb79d4aac5bc2f07563f",
},
}

Create a migration for your model BEFORE adding ``getpaid`` to ``INSTALLED_APPS``:

.. code-block:: console

./manage.py makemigrations

Add ``getpaid`` and broker plugin to your ``INSTALLED_APPS``:

.. code-block:: python

INSTALLED_APPS = [
...
'getpaid',
'getpaid_payu', # one of plugins
...
]

Migrate the database:

.. code-block:: console

./manage.py migrate

Add getpaid to URL patterns:

.. code-block:: python

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

Write a view that will create the Payment.

An example view and its hookup to urls.py can look like this:

.. code-block:: python

# orders/views.py
from getpaid.forms import PaymentMethodForm

class OrderView(DetailView):
model = Order

def get_context_data(self, **kwargs):
context = super(OrderView, self).get_context_data(**kwargs)
context["payment_form"] = PaymentMethodForm(
initial={"order": self.object, "currency": self.object.currency}
)
return context

# main urls.py

urlpatterns = [
# ...
path("order//", OrderView.as_view(), name="order_detail"),
]

You'll also need a template (``order_detail.html`` in this case) for this view.
Here's the important part:

.. code-block::

Choose payment broker:



{% csrf_token %}
{{ payment_form.as_p }}

Running Tests
=============

.. code-block:: console

poetry install
poetry run tox

Alternatives
============

* `django-payments `_

Credits
=======

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

Development of version 2.0 sponsored by `SUNSCRAPERS `_

Disclaimer
==========

This project has nothing in common with `getpaid `_ plone project.