Skip to content

akolpakov/django-paynova

Repository files navigation

#Paynova Aero for Django

Implementation of Paynova Aero work flow for Django. Using Paynova API python library: paynova-api-python-client.

Installation

  1. Install django-paynova:

    pip install django-paynova
    

    Python 2.7, 3.3, 3.4, PyPy are supported
    Django 1.6, 1.7 are supported

  2. Add django-paynova to INSTALLED_APPS:

    INSTALLED_APPS = (
        ...
        'django_paynova',
        ...
    )
  3. Configure settings:

    PAYNOVA_MERCHANT_ID = 'MERCHANT_ID'
    PAYNOVA_PASSWORD = 'PASSWORD'
    PAYNOVA_SECRET = 'SECRET'
    PAYNOVA_CALLBACK_URL = 'http://mysite.com'

    For production:

    PAYNOVA_LIVE = True
  4. Run ./manage migrate

  5. Add urls to handle Paynova's callbacks:

    urlpatterns = patterns('',
        url(r'^(?i)payments/paynova/', include('django_paynova.urls')),
    )

Usage

  1. 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

  2. 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 model
    • status - status of payment
    • params - payment params from Paynova

Advanced

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

Errors

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

Tests

At first make sure that you are in virtualenv.

Install all dependencies:

make setup

To run tests:

make test

License

MIT licence