Django support for Spgateway
Project description
Write Django and your store as usual, and let django-spgateway handle your transactions with Spgateway
Requirements
Python 3.7
Django 2.1
pycrypto 2.6.1
We only tested on environment as below
Installation
Install using pip or pipenv:
pip install django-spgageway
Alternatively, you can install download or clone this repo and call pip install -e ..
Add to INSTALLED_APPS in your settings.py:
'spgateway',
Add settings in your settings.py:
SPGATEWAY_PROFILE = { 'YOUR_MerchantID': { 'MerchantID': 'YOUR_MerchantID', 'HashKey': 'YOUR_HashKey', 'HashIV': 'YOUR_HashIV', }, } SPGATEWAY_MERCHANTID = 'YOUR_MerchantID' SPGATEWAY_ORDERMODEL = 'yourapp.Order'
Add urlpattern into your urls.py:
path('spgateway/', include('spgateway.urls')), for Django 2
url(r'^spgateway/', include('spgateway.urls')), for Django 1
Import from spgateway.models import SpgatewayOrderMixin and inherit from it with your order model.
Run python manage.py makemigrations and python manage.py migrate as usual.
Get form from your order by calling generate_credit_form in view:
credit_form = order_object.generate_credit_form(request)
And use it in your template:
<form action="{{ credit_form.action }}" method="POST"> {{ credit_form.as_p }} <input type="submit"> </form>
Add SpgatewaySameSiteCookieMiddleware before SessionMiddleware to avoid SameSite cookie while return from payment gateway:
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'spgateway.middleware.SpgatewaySameSiteCookieMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', ... ]
Example model
from spgateway.models import SpgatewayOrderMixin class Order(SpgatewayOrderMixin, models.Model): total = models.IntegerField(default=0, verbose_name='Total Price') user = models.ForeignKey(User, verbose_name='Order by user') is_paid = models.BooleanField(default=False) # Add this parameter to let django-spgateway know which field is amount of price SpgatewayAmtFieldName = 'total' # Add this parameter to let django-spgateway set item description SpgatewayItemDesc = 'Items descriptions' # Add this method to let django-spgateway retrieve email def get_SpgatewayEmail(self, **kwargs): return self.user.email # Add this method let django-spgateway call when notify from Spgateway server # Change your order with this method def spgateway_notify(self, request, trade_info): status = trade_info['Status'] status_msg = trade_info['Message'] if status == 'SUCCESS': self.is_paid = True self.save() else: # TODO: Handle error # Add this method let django-spgateway call when client return from Spgateway server # Never trust data from client. Display messages only def spgateway_return(self, request, trade_info): status = trade_info['Status'] status_msg = trade_info['Message'] if status == 'SUCCESS': # TODO: Display success message to user else: # TODO: Display error message to user # django-spgateway will call this method to redirect user after user return from Spgateway server def get_absolute_url(self): return reverse('ORDER_DETAIL_VIEW_NAME_HERE')
Bugs and suggestions
If you have found a bug or if you have a request for additional functionality, please use the issue tracker on GitHub.
License
You can use this under MIT. See LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django_spgateway-0.7.6-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9ca8cb59027b7986015518dd34146be87132dcd3d6ab77322d97945b0610c5e4 |
|
MD5 | 5760dcdb2e5a6c9efdef13dad4dac0e5 |
|
BLAKE2b-256 | 72ec2abf22d78c575655b032e1fbfc220b888719542a5f5c8e124f824e9f0995 |