A package for PayTM integration in Django REST Framework
PayTM | Django REST Framework
is a Django packaged app that provides necessary views
based in Django REST Framework.
It enables easy integration of PayTM Payment Gateway with Web/Mobile Application with a RESTful API based server.
Contributors: WE'RE LOOKING FOR SOMEONE WHO CAN CONTRIBUTE IN DOCS
- Civil Machines Technologies Private Limited: For providing me platform and
funds for research work. This project is hosted currently with
CMT
only. - Himanshu Shankar: Himanshu Shankar has initiated this project and worked on this project to collect useful functions and classes that are being used in various projects.
- Download and Install via
pip
pip install drf_paytm
or
Download and Install via easy_install
easy_install drf_paytm
- Add, if wanted,
drfaddons
inINSTALLED_APPS
(This is although not required!)
INSTALLED_APPS = [
...
'drf_paytm',
...
]
- Also add other dependencies in
INSTALLED_APPS
INSTALLED_APPS = [
...
'drfaddons',
...
]
- Include urls of
drf_paytm
inurls.py
urlpatterns = [
...
path('api/paytm/', include('drf_paytm.urls')),
...
]
# or
urlpatterns = [
...
url(r'^api/paytm/', include('drf_paytm.urls')),
...
]
- Run migrate command:
python manage.py migrate
- Prepare
json
data to post onrequest/
view:{"oid": "ORDER_ID", "amount": "200", "callback_url": "FRONT_END APP URL"}
callback_url
: FrontEnd URL to open when payment is successful. Must not have any queryset as?oid=ORDER_ID
is appended.- Post to
request/
and parse response to prepare a HTML form as per code shown below. - Don't add
<input>
for empty andnull
fields from json response ofrequest/
API. - Set
CALLBACK_URL
in HTML frompaytm_callback_url
of JSON. - Once the payment is done, user is redirected to
response/
view which will verify payment. - If payment is verified by Django Backend, user is redirected to
http://callback_url?oid=ORDER_ID
. - Access
order/ORDER_ID/
API to getis_completed
status. If it'sfalse
, checklast_payment_status
.
Note: In case of critical failure, server's JSON response is shown.
Sample HTML Code to be generated by FrontEnd App(from PayTM)
<html>
<head>
<title>Merchant Check Out Page</title>
</head>
<body>
<center><h1>Please do not refresh this page...</h1></center>
<form method="post" action="https://securegw-stage.paytm.in/theia/processTransaction" name="f1">
<table border="1">
<tbody>
<input type="hidden" name="MID" value="rxazcv89315285244163">
<input type="hidden" name="WEBSITE" value="WEBSTAGING">
<input type="hidden" name="ORDER_ID" value="order1">
<input type="hidden" name="CUST_ID" value="cust123">
<input type="hidden" name="MOBILE_NO" value="7777777777">
<input type="hidden" name="EMAIL" value="username@emailprovider.com">
<input type="hidden" name="INDUSTRY_TYPE_ID" value="Retail">
<input type="hidden" name="CHANNEL_ID" value="WEB">
<input type="hidden" name="TXN_AMOUNT" value="100.12">
<input type="hidden" name="CALLBACK_URL" value="https://Merchant_Response_URL>">
<input type="hidden" name="CHECKSUMHASH" value="ZWdMJOr1yGiFh1nns2U8sDC9VzgUDHVnQpG
pVnHyrrPb6bthwro1Z8AREUKdUR/K46x3XvFs6Xv7EnoSOLZT29qbZJKXXvyEuEWQIJGkw=">
</tbody>
</table>
<script type="text/javascript">
document.f1.submit();
</script>
</form>
</body>
</html>
The application has three models:
PayTMConfiguration
: You need to define your PayTM configurations in this model. Only one object can haveis_active
set toTrue
which will be used with PayTM API.TransactionRequest
: This will contain all the PayTM Transaction Request that one will create with PayTM.TransactionResponse
: This will contain all the responses received from PayTM API against transaction.
The application has following views:
ListAddTransactionRequestView
: All payment request should be made on this view. Requires a logged in user. It'll provide user with required data, includingchecksum hash
that will be used with PayTM API.AddTransactionResponseView
: Response from PayTM is posted on this view. URL for this view should go asCALLBACK_URL
. This view then redirects user to FrontEnd app withOID
as queryset parameter.PayNowTransaction
: This view is for testing w/o a frontend client. It will open PayTM payment page.
request/
: All payment request to be made via this URL.response/
: All response from PayTM is posted on this URL.order/OID/
: Retrieve specific payment request data.now/
: For immediate testing of API, open this url.
- Complete
Installation Steps
(mentioned above) - Create a configuration via
Django Admin
inPayTM Configuration
. - Provide
base_url
of your Backend Server. - Set
is_active
toTrue
- Note: Use sandbox mode credential at first
- Test API by accessing
/api/paytm/now/
endpoint - Use
PayTM Testing Credential
:
Mobile: 7777777777
OTP: 489871
Password: Paytm12345