diff --git a/abonapp/pay_systems.py b/abonapp/pay_systems.py new file mode 100644 index 0000000..f4b7863 --- /dev/null +++ b/abonapp/pay_systems.py @@ -0,0 +1,108 @@ +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 + + +SERV_ID = 'y832r92y8f9e' +SECRET = '302u8u3280' + + + +#payin.php?ACT=1&PAY_AMOUNT=2&PAY_ACCOUNT=13&PAY_ID=2&RECEIPT_NUM=24&TRADE_POINT=tr2&SIGN=c069de1e5469ff7078f00d1acd4c413d +#?ACT=1&PAY_ACCOUNT=7120&SERVICE_ID=y832r92y8f9e&PAY_ID=3561234&TRADE_POINT=377&SIGN=C90A5138C3B54010FE711BBFC947327C + +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() + print('Signs:', our_sign, sign, s) + 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) + AllTimePayLog.objects.create( + pay_id=pay_id, + summ=pay_amount + ) + #TODO: тут в author надо передавать учётку автора платежа + abon.add_ballance(abon, pay_amount) + abon.save(update_fields=['ballance']) + 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)