Usage¶
Describes how to use drf_instamojo
when it is installed and configured.
Create a configuration via Django Admin in Instamojo Configuration
Set
is_active
to TrueNote: Use sandbox mode credentials during local development
Integration With Apps¶
Use serializers
to integrate with your custom apps.
Creating Payment Request¶
Create a view: PaymentView
Use PaymentRequestSerializer to create a payment request.
Check example code in serializers.py:
# serializers.py
# Initialize serializer with proper data
prs = PaymentRequestSerializer(data={'amount': 120.00, 'purpose': 'Test', 'send_sms': False,
'redirect_url': 'http://127.0.0.1/api/test/'})
# Check if data is valid
prs.is_valid(raise_exception=True)
instance = prs.save(created_by=user)
Save instance as foreign key in app pointing to bill for which the payment request is made.
Return longurl to client (instamojo) for making payment
Problems with .save() method¶
Note:
created_by
is required in .save() serializer to link instance with user- If app doesn’t require user to login, use following logic:
- Inside payment view, take following data from user:
Name of the customer:
random_name
Mobile Number of the customer mobile:
1234567890
Email of the customer email:
test@abc.com
Use following code to create a logic around getting an existing or creating a new user:
# example.py
from django.contrib.auth import get_user_model
user_model = get_user_model()
try:
user = user_model.objects.get(email=email)
except user_model.DoesNotExist:
try:
user = user_model.objects.get(mobile=mobile)
except user_model.DoesNotExist:
# Now you're dead sure that user does not exists.
user = user_model.objects.create(name=name, mobile=mobile, email=email, password="RANDOM_PASSWORD")
Otherwise, simply use user = request.user while calling .save() on serializer.
Bonus Pointer: Check out our library for managing users, Django REST Framework - User
Payment Completion¶
Use
payment_done
signalCreate
signals
python directory with__init__.py, handlers.py
in appIn
handlers.py
, create a function for handlingpayment_done
signalFor more info, see Signals
# handlers.py
from django.dispatch import receiver
from drf_instamojo.models import PaymentRequest
from drf_instamojo.signals import payment_done
@receiver(signal=payment_done, sender=PaymentRequest)
def payment_done_handler(instance: PaymentRequest, sender, *args, **kwargs):
...
# Your logic for handling payments
# Payment completed
# bill.paid()
# item.dispatch()
...