django-paynova 0.1.6
Python client for Paynova's API. For Django framework.
License: MIT
Keywords: Paynova API client python django

Paynova Aero for Django
=======================

Implementation of `Paynova
Aero <http://docs.paynova.com/display/AERO/Payment+Flow>`__ work flow
for Django. Using `Paynova
API <http://docs.paynova.com/display/API/Paynova+API+Home>`__ python
library:
`paynova-api-python-client <https://github.com/akolpakov/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``:

   .. code:: python

       INSTALLED_APPS = (
           ...
           'django_paynova',
           ...
       )

3. Configure settings:

   .. code:: python

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

   For production:

   .. code:: python

       PAYNOVA_LIVE = True

4. Run ``./manage migrate``

5. Add urls to handle Paynova's callbacks:

   .. code:: python

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

Usage
=====

1. Create order and init payment with default params:

   .. code:: python

       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 <http://docs.paynova.com/display/API/Create+Order>`__

2. Handle `Event Hook
   Notifications <http://docs.paynova.com/display/EVENTHOOKS/Event+Hook+Notifications+Home>`__:

   .. code:: python

       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 <http://docs.paynova.com/display/EVENTHOOKS/EHN%3A+Payment>`__
      from Paynova

Advanced
~~~~~~~~

Also you can create order and initialize payment separately:

.. code:: python

    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
   parameters <http://docs.paynova.com/display/API/Create+Order>`__
-  ``initialize_payment`` takes dictionary with `Initialize Payment
   parameters <http://docs.paynova.com/display/API/Initialize+Payment>`__

Errors
~~~~~~

If Paynova return an error, ``PaynovaException`` will be raised

.. code:: python

    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 <./LICENSE>`__