django-proxypay
Django Proxypay is a Django Framework application/library that facilitates the integration of your Django project with the Proxypay API. Allowing to generate referrals, recognize payments and look through Proxypay's webhooks.
If you are looking for a Python alternative that doesn't use any framework, maybe proxypay-py could be useful. proxypay-py is the official Proxypay library maintained by TimeBoxed
Some Features
The Django Proxypay really comes to facilitate the integration to the Proxypay API, leaving all interaction with Proxypay totally out of the box. Letting you focus more on data validation and / or the Frontend
- Generate references and store them in the database
- Verify payment directly from a reference instance
- Acknowledge payment
- Recognize payments automatically using Proxypay webhooks
- Mock Payment, for development tests
- Of course, Signals, notifying you when a payment is recognized or a reference is created or updated.
Installation
Simple django-proxypay can be installed with pip
:
pip install django-proxypay
Or from this repository:
pip install -e git+https://github.com/txiocoder/django-proxypay.git@master#egg=django-proxypay
Requirements
- Python
3.8;
- Django
3.0;
- requests
2.23
- django-admin-display
These are the officially supported python and package versions. Other versions will probably work
Configurations
As stated above, Django Proxypay is a Django Application. To configure your project you simply need to add proxypay
to your INSTALLED_APPS
and configure the PROXYPAY
variable in the settings.py
file
for more details on how to configure the PROXYPAY variable, access the proxypay.conf file
Like the example below, file settings.py
:
INSTALLED_APPS = [
'proxypay',
]
PROXYPAY = {
'PRIVATE_KEY': os.environ.get('PP_PRIVATE_KEY'),
'ENTITY': os.environ.get('PP_ENTITY'),
'REFERENCE_LIFE_TIME_IN_DAYS': os.environ.get('PP_REFERENCE_LIFE_TIME_IN_DAYS'),
'ACCEPT_UNRECOGNIZED_PAYMENT': os.environ.get('PP_ACCEPT_UNRECOGNIZED_PAYMENT'),
'ACKNOWLEDGE_MOCK_PAYMENT_LOCALLY_AUTOMATICALLY': os.environ.get('PP_ACKNOWLEDGE_MOCK_PAYMENT_LOCALLY_AUTOMATICALLY')
'ENV': os.environ.get('PP_ENV'),
'PROXYPAY_FEE': ('Proxypay', 0.25, 50, 1000),
'BANK_FEE': (None, 0, 0, 0),
}
Note: That's all, make sure to run the database migrations. Using the commands python manage.py makemigrations
and python manage.py migrate
to generate a table of References in the database
Basic use
Creating references and verifying payments
Use the proxypay.references.create
method to create new references. This method will return an instance of proxypay.models.Reference
. Which you can use to verify payment and other data such as related entity, reference id and more
from proxypay.references import create
reference = create(1780.78)
reference2 = create(
amount=3500,
fields={
'product': 'some',
'service': 'some service name'
},
days=3,
)
payment = reference.check_payment()
Proxypay Webhooks, watching for payments
You can avoid manually checking for paid references. Django Proxypay comes with a view ready to keep an eye on the Proxypay API Webhooks. This view will check the signature, find the related proxypay.models.Reference
instance and update as paid. At the end it will trigger the reference_paid
signal.
To use, you only need to add the endpoint that will be used by the Proxypay API. As in the example below. In your urls.py
file:
from django.urls import path
from django.contrib import admin
from proxypay.views import watch_payments
urlpatterns = [
path( "admin/", admin.site.urls),
path('proxypay-payments', watch_payments),
]
Note: Don't forget to configure the endpoint in your Proxypay account
Working with Signals
Signals are the best way to keep an eye on new reference or new payments. So, in your signals.py
file:
from django.dispatch import receiver
from proxypay.signals import reference_paid, reference_created
@receiver(reference_paid)
def handle_paid_reference(sender, reference, **kwargs):
print(f"Reference {reference.reference} was paid!")
print('(dict) Payment Data: ', reference.payment)
@receiver(reference_created)
def handle_created_reference(sender, reference, **kwargs):
print(f"Reference {reference.reference} was created!")
Mock Payment
In development mode, you can create fictitious payments to test your application. Using Django's manage.py
in your terminal like below:
python manage.py proxypay pay 123902092
This command will search for the reference in the database, if found and has not yet been paid, it will make the payment. This time, the signal will be triggered, and you will be able to simulate it as if the payment confirmation came from Proxypay's Webhooks. To perform desired operations
API Reference
Okay, let's see how far django-proxypay can help you...