1 changed files with 108 additions and 0 deletions
@ -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 "<?xml version='1.0' encoding='UTF-8'?>\n" \ |
|||
"<pay-response>\n" \ |
|||
" <status_code>%d</status_code>\n" % safe_int(err_id) +\ |
|||
" <time_stamp>%s</time_stamp>\n" % current_date.strftime("%d.%m.%Y %H:%M:%S") +\ |
|||
"</pay-response>" |
|||
|
|||
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 "<?xml version='1.0' encoding='UTF-8'?>\n" \ |
|||
"<pay-response>\n" \ |
|||
" <balance>%.2f</balance>\n" % ballance +\ |
|||
" <name>%s</name>\n" % fio +\ |
|||
" <account>%d</account>\n" % pay_account +\ |
|||
" <service_id>%s</service_id>\n" % SERV_ID +\ |
|||
" <min_amount>10.0</min_amount>\n" \ |
|||
" <max_amount>50000</max_amount>\n" \ |
|||
" <status_code>21</status_code>\n" \ |
|||
" <time_stamp>%s</time_stamp>\n" % current_date +\ |
|||
"</pay-response>" |
|||
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 "<?xml version='1.0' encoding='UTF-8'?>" \ |
|||
"<pay-response>\n" +\ |
|||
" <pay_id>%s</pay_id>\n" % pay_id +\ |
|||
" <service_id>%s</service_id>\n" % serv_id +\ |
|||
" <amount>%.2f</amount>\n" % pay_amount +\ |
|||
" <status_code>22</status_code>\n" +\ |
|||
" <time_stamp>%s</time_stamp>\n" % current_date +\ |
|||
"</pay-response>" |
|||
elif act == 7: |
|||
pay = AllTimePayLog.objects.get(pay_id=pay_id) |
|||
current_date = timezone.now().strftime("%d.%m.%Y %H:%M:%S") |
|||
return "<?xml version='1.0' encoding='UTF-8'?>\n" \ |
|||
"<pay-response>\n" \ |
|||
" <status_code>11</status_code>\n" \ |
|||
" <time_stamp>%s</time_stamp>\n" % current_date +\ |
|||
" <transaction>\n" \ |
|||
" <pay_id>%s</pay_id>\n" % pay_id +\ |
|||
" <service_id>%s</service_id>\n" % serv_id +\ |
|||
" <amount>%.2f</amount>\n" % float(pay.summ) +\ |
|||
" <status>111</status>\n" +\ |
|||
" <time_stamp>%s</time_stamp>\n" % current_date +\ |
|||
" </transaction>\n" \ |
|||
"</pay-response>" |
|||
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) |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue