#Paynova Aero for Django
Implementation of Paynova Aero work flow for Django. Using Paynova API python library: paynova-api-python-client.
-
Install
django-paynova
:pip install django-paynova
Python 2.7, 3.3, 3.4, PyPy are supported
Django 1.6, 1.7 are supported -
Add
django-paynova
toINSTALLED_APPS
:INSTALLED_APPS = ( ... 'django_paynova', ... )
-
Configure settings:
PAYNOVA_MERCHANT_ID = 'MERCHANT_ID' PAYNOVA_PASSWORD = 'PASSWORD' PAYNOVA_SECRET = 'SECRET' PAYNOVA_CALLBACK_URL = 'http://mysite.com'
For production:
PAYNOVA_LIVE = True
-
Run
./manage migrate
-
Add urls to handle Paynova's callbacks:
urlpatterns = patterns('', url(r'^(?i)payments/paynova/', include('django_paynova.urls')), )
-
Create order and init payment with default params:
from django_paynova import create_order, PaynovaException try: pp = create_order({ 'orderNumber': '0001', 'currencyCode': 'EUR', 'totalAmount': 10 }) # TODO: redirect to pp.url except PaynovaException as e: # TODO: handle exception
create_order
takes dictionary with Create Order parameters -
Handle Event Hook Notifications:
from django.dispatch import receiver from django_paynova.signals import paynova_payment @receiver(paynova_payment) def paynova_payment_signal(sender, status, params, **kwargs): # TODO: handle paynova payment notification
where
sender
- PaynovaPayment modelstatus
- status of paymentparams
- payment params from Paynova
Also you can create order and initialize payment separately:
from django_paynova import create_order, initialize_payment, PaynovaException
try:
# create order
pp = create_order({
'orderNumber': '0005',
'currencyCode': 'EUR',
'totalAmount': 10
}, init_payment=False)
# init payment. http://docs.paynova.com/display/API/Initialize+Payment
pp = initialize_payment({'orderId': pp.order_id})
# TODO: redirect to pp.url
except PaynovaException as e:
# TODO: handle exception
create_order
takes dictionary with Create Order parametersinitialize_payment
takes dictionary with Initialize Payment parameters
If Paynova return an error, PaynovaException
will be raised
from django-paynova import create_order, PaynovaException
try:
pp = create_order()
except PaynovaException as e:
# process exception
# e.errorNumber, e.statusKey, e.statusMessage, e.errors
pass
At first make sure that you are in virtualenv.
Install all dependencies:
make setup
To run tests:
make test