from hashlib import md5
from django.utils import timezone
from mydefs import safe_int, safe_float
from .models import Abon, AllTimePayLog
from django.db import DatabaseError
from djing.settings import pay_SECRET as SECRET, pay_SERV_ID as SERV_ID
#?ACT=1&PAY_ACCOUNT=960849&SERVICE_ID=y832r92y8f9e&PAY_ID=3561234&TRADE_POINT=377&SIGN=32e533a72389fe4e93746509f9d672f8
#?ACT=4&PAY_ACCOUNT=960849&PAY_AMOUNT=1.00&RECEIPT_NUM=29096&SERVICE_ID=y832r92y8f9e&PAY_ID=3561234&TRADE_POINT=496&SIGN=c42161214099dba01e6ab008552bbd3d
def allpay(request):
def bad_ret(err_id):
current_date = timezone.now()
return "\n" \
"\n" \
" %d\n" % safe_int(err_id) +\
" %s\n" % current_date.strftime("%d.%m.%Y %H:%M:%S") +\
""
try:
serv_id = request.GET.get('SERVICE_ID')
act = safe_int(request.GET.get('ACT'))
pay_account = safe_int(request.GET.get('PAY_ACCOUNT'))
pay_id = request.GET.get('PAY_ID')
pay_amount = safe_float(request.GET.get('PAY_AMOUNT'))
sign = request.GET.get('SIGN').lower()
# check sign
md = md5()
s = '_'.join((str(act), str(pay_account), serv_id or '', pay_id, SECRET))
md.update(bytes(s, 'utf-8'))
our_sign = md.hexdigest()
if our_sign != sign:
return bad_ret(-101)
if act <= 0: return bad_ret(-101)
if pay_account == 0: return bad_ret(-40)
if act == 1:
abon = Abon.objects.get(username=pay_account)
fio = abon.fio
ballance = float(abon.ballance)
current_date = timezone.now().strftime("%d.%m.%Y %H:%M:%S")
return "\n" \
"\n" \
" %.2f\n" % ballance +\
" %s\n" % fio +\
" %d\n" % pay_account +\
" %s\n" % SERV_ID +\
" 10.0\n" \
" 50000\n" \
" 21\n" \
" %s\n" % current_date +\
""
elif act == 4:
abon = Abon.objects.get(username=pay_account)
pays = AllTimePayLog.objects.filter(pay_id=pay_id)
if pays.count() > 0:
return bad_ret(-100)
# тут в author передаём учётку абонента, т.к. это он сам через терминал пополняет
abon.add_ballance(abon, pay_amount, comment='AllPay %.2f' % pay_amount)
abon.save(update_fields=['ballance'])
AllTimePayLog.objects.create(
pay_id=pay_id,
summ=pay_amount
)
current_date = timezone.now().strftime("%d.%m.%Y %H:%M:%S")
return "" \
"\n" +\
" %s\n" % pay_id +\
" %s\n" % serv_id +\
" %.2f\n" % pay_amount +\
" 22\n" +\
" %s\n" % current_date +\
""
elif act == 7:
pay = AllTimePayLog.objects.get(pay_id=pay_id)
current_date = timezone.now().strftime("%d.%m.%Y %H:%M:%S")
return "\n" \
"\n" \
" 11\n" \
" %s\n" % current_date +\
" \n" \
" %s\n" % pay_id +\
" %s\n" % serv_id +\
" %.2f\n" % float(pay.summ) +\
" 111\n" +\
" %s\n" % current_date +\
" \n" \
""
else:
return bad_ret(-101)
except Abon.DoesNotExist:
return bad_ret(-40)
except DatabaseError:
return bad_ret(-90)
except AllTimePayLog.DoesNotExist:
return bad_ret(-10)
except AttributeError:
return bad_ret(-101)