Skip to content

Instantly share code, notes, and snippets.

@fceruti
Created October 3, 2014 15:05
Show Gist options
  • Save fceruti/bf99825af56faaff3d0e to your computer and use it in GitHub Desktop.
Save fceruti/bf99825af56faaff3d0e to your computer and use it in GitHub Desktop.
Khipu payment form
# coding=utf-8
import hashlib
from django import forms
from .khipu_settings import USER_ID, USER_KEY
class KhipuPaymentForm(forms.Form):
receiver_id = forms.CharField(required=True, widget=forms.HiddenInput())
subject = forms.CharField(required=True, widget=forms.HiddenInput())
body = forms.CharField(required=True, widget=forms.HiddenInput())
amount = forms.IntegerField(required=True, widget=forms.HiddenInput())
payer_email = forms.CharField(required=False, widget=forms.HiddenInput())
transaction_id = forms.CharField(required=False, widget=forms.HiddenInput())
custom = forms.CharField(required=False, widget=forms.HiddenInput())
notify_url = forms.CharField(required=False, widget=forms.HiddenInput())
return_url = forms.CharField(required=False, widget=forms.HiddenInput())
cancel_url = forms.CharField(required=False, widget=forms.HiddenInput())
picture_url = forms.CharField(required=False, widget=forms.HiddenInput())
hash = forms.CharField(required=False, widget=forms.HiddenInput())
def __init__(self, subject, body, amount, notify_url='', return_url='', cancel_url='', transaction_id='',
payer_email='', picture_url='', custom='', *args, **kwargs):
super(KhipuPaymentForm, self).__init__(*args, **kwargs)
params = [
('receiver_id', USER_ID),
('subject', subject),
('body', body),
('amount', int(amount)),
('payer_email', payer_email),
('transaction_id', transaction_id),
('custom', custom),
('notify_url', notify_url),
('return_url', return_url),
('cancel_url', cancel_url),
('picture_url', picture_url),
]
for param in params:
self.fields[param[0]].initial = param[1]
self.fields['hash'].initial = self.generate_hash(params)
def generate_hash(self, params):
""" Implements the hashing function described in https://khipu.com/page/api
:param params Any paramater you wish to encode
:return A string representing the hash of an api call
"""
string = ''
for param in params:
string += '%s=%s&' % (str(param[0]), str(param[1]))
string += 'secret=' + USER_KEY
return hashlib.sha1(string).hexdigest()
# Luego en un template se usa así:
#
#<form action="https://khipu.com/api/1.1/createPaymentPage" method="post">
# {{ khipu_form }}
# <input type="submit" value="Pagar con khipu"/>
#</form>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment