- Install via pip: - pip install django-payu-payments 
- Add - payuto INSTALLED_APPS:- INSTALLED_APPS = [ ... 'payu', ... ]
- Add URLs to URLConf: - url(r'^payments/', include('payu.urls', namespace='payu')),
- Run migrations: - python manage.py migrate 
Configuration is done via Django's settins.py file.
- PAYU_POS_ID- Your POS ID. If not provided the test payment value will be used. 
- PAYU_MD5_KEY- Your MD5 key. If not provided the test payment value will be used. 
- PAYU_SECOND_MD5_KEY- Your second MD5 key. If not provided the test payment value will be used. 
- PAYU_CONTINUE_PATH- Specifies path on your website, where user should be redirected after payment (successful, or not). May be absolute path, like - /some-page/or- reverse('some:thing'). This view should handle GET parameters- error=501in case of failed payment and- no_payment=1in case of payment with total equals 0, which is registered, but actually sent to PayU.
- PAYU_VALIDITY_TIME- Payment validity time (in seconds), after which it's canceled, if user did not take action. If not provided - 600will be used.
To create payment object you have to call Payment.create method:
from payu.models import Payment
description = 'Some stuff'
products = [
    {
        'name': 'Some product',
        'unitPrice': 14.99,
        'quantity': 1
    },
    {
        'name': 'Some other product',
        'unitPrice': 3.19,
        'quantity': 4
    }
]
buyer = {
    'email': '[email protected]',
    'firstName': 'John',
    'lastName': 'Doe'
}
notes = 'This client is important for us, we should prioritize him.'
payment = Payment.create(request, description, products, buyer, validity_time=300, notes)
request is just Django HTTP request object, we need it to get buyer IP, and absolute URLs.
validity_time is optional and overrides PAYU_VALIDITY_TIME setting.
notes is optional, and used for storing internal information about payment.
Payment.create will return two-key dictionary, containing Payment object and URL where buyer should be redirected, or False if not successful.
{
    'object': <Payment object>,
    'redirect_url': 'https://...'
}
To get data associated with payment you just need to retrieve Payment object:
Payment.objects.get(...)
There are also few helpful methods, which you can call on Payment object:
- get_total_display()- Returns pretty formatted - totalvalue.
- get_products_table()- Returns pretty formatted table of products associated with payment. 
- is_successful()- For - statusequal- COMPLETEDreturns- True, otherwise- False.
- is_not_successful()- For - statusequal- CANCELEDor- REJECTEDreturns- True, otherwise- False.
- PEP8 fixes
- changelog added
- get_total_display(),- get_products_table(),- is_successful()and- is_not_successful()methods added
- JSONField is not Postgres-only anymore
- Payment.create()now returns two-key dictionary instead of just redirect URL
- Paymentobjects are now ordered from newest to oldest, by default
- compiled translation is now included in package
- settings moved to settings.py
- settings is not dictionary anymore
- validity time added
JSONField and ordering related changes requires you to take some action when upgrading.
- run migrations: - python manage.py migrate payu.
- run following code, using Django shell ( - python manage.py shell):- import json from payu.models import Payment for p in Payment.objects.all(): if isinstance(p.products, str): p.products = json.loads(p.products) p.save()
- sum added to products table
- initial version