Install via pip:
pip install django-payu-payments
Add
payu
to 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/
orreverse('some:thing')
. This view should handle GET parameterserror=501
in case of failed payment andno_payment=1
in 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
600
will 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': 'john.doe@domain.com', '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
total
value.get_products_table()
Returns pretty formatted table of products associated with payment.
is_successful()
For
status
equalCOMPLETED
returnsTrue
, otherwiseFalse
.is_not_successful()
For
status
equalCANCELED
orREJECTED
returnsTrue
, otherwiseFalse
.
- PEP8 fixes
- changelog added
get_total_display()
,get_products_table()
,is_successful()
andis_not_successful()
methods added- JSONField is not Postgres-only anymore
Payment.create()
now returns two-key dictionary instead of just redirect URLPayment
objects 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