Skip to content
This repository has been archived by the owner on Mar 27, 2021. It is now read-only.
/ Bubble Public archive

Commit

Permalink
+ Обработчик платежей Free-Kassa (локально протестирован)
Browse files Browse the repository at this point in the history
  • Loading branch information
MarshalX committed May 27, 2017
1 parent 0f57ee8 commit 14bcf65
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 6 deletions.
8 changes: 4 additions & 4 deletions Bubble/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@


PAYMENT = {
'aggregator': 'interkassa',
'publicKey': '5919e67a3b1eaf8c718b4567',
'secretKey': 'yENf6A2eWiVzLyny',
'secretKey2': 'd2uykhf7', # only for free-kassa
'aggregator': 'free-kassa',
'publicKey': '51131',
'secretKey': 'dbt44xm8',
'secretKey2': 'hb63vjv4', # only for free-kassa
'currency': 'RUB'
}

Expand Down
97 changes: 95 additions & 2 deletions free-kassa/payment.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,105 @@
# -*- coding: utf-8 -*-
# Bubble Copyright © 2017 Il'ya Semyonov
# License: https://www.gnu.org/licenses/gpl-3.0.en.html
from __future__ import unicode_literals

import hashlib
from datetime import datetime

from django.conf.urls import url
from django.shortcuts import render
from django.shortcuts import HttpResponse
from django.core.exceptions import ObjectDoesNotExist
from django.db import Error
from django.http import Http404
from django.conf import settings

import basic.models


allowIp = {
'136.243.38.147',
'136.243.38.149',
'136.243.38.150',
'136.243.38.151',
'136.243.38.189',
'88.198.88.98',
'127.0.0.1'
}


getParameters = {
'MERCHANT_ID',
'AMOUNT',
'intid',
'MERCHANT_ORDER_ID',
'CUR_ID',
'SIGN',
'us_item'
}


def payment(request):
return render(request, 'index.html')
ip = request.META.get('REMOTE_ADDR')
if ip not in allowIp:
raise Http404()

for getParameter in getParameters:
if getParameter not in request.GET:
return HttpResponse('Invalid request')

data = request.GET.copy()
key = settings.PAYMENT['secretKey2']
account = data.get('MERCHANT_ORDER_ID')

try:
itemId = int(data.get('us_item'))
orderSum = int(data.get('AMOUNT'))
paymentId = int(data.get('intid'))
except ValueError:
return HttpResponse('Invalid parameters')

signString = data.get('MERCHANT_ID') + ':' + data.get('AMOUNT') + ':' + key + ':' + account
sign = hashlib.md5(signString).hexdigest()

if data.get('SIGN') != sign:
return HttpResponse('Incorrect digital signature')

if data.get('MERCHANT_ID') != settings.PAYMENT['publicKey']:
return HttpResponse('Invalid checkout id')

try:
item = basic.models.Item.objects.get(id=itemId)
except ObjectDoesNotExist:
return HttpResponse('Invalid purchase subject')

price = item.item_price

if orderSum != price:
return HttpResponse('Invalid payment amount')

try:
basic.models.Payment.objects.get(payment_number=paymentId)
except ObjectDoesNotExist:
try:
p = basic.models.Payment(payment_number=paymentId,
payment_account=account,
payment_item=item,
payment_status=1,
payment_dateComplete=datetime.now())
p.save()
except Error:
return HttpResponse('Unable to create payment database')

try:
cmd = item.item_cmd.format(account=account)
task = basic.models.Task(task_cmd=cmd, task_payment=p)
task.save()
except Error:
return HttpResponse('Unable to create task database')

return HttpResponse('YES')
else:
return HttpResponse('Payment has already been paid')


urlpatterns = [
Expand Down

0 comments on commit 14bcf65

Please sign in to comment.