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 django.conf import settings SECRET = getattr(settings, 'pay_SECRET') SERV_ID = getattr(settings, 'pay_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)