You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
4.5 KiB
126 lines
4.5 KiB
# coding=utf-8
|
|
import datetime
|
|
from hashlib import md5
|
|
from django.shortcuts import render
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
|
from finance.models import Bill, YandexKassaHistory
|
|
from lms.settings import YANDEX_MONEY_SHOP_PASSWORD
|
|
|
|
|
|
def gen_md5(cd):
|
|
return md5(';'.join((
|
|
cd['action'],
|
|
cd['orderSumAmount'],
|
|
cd['orderSumCurrencyPaycash'],
|
|
cd['orderSumBankPaycash'],
|
|
cd['shopId'],
|
|
cd['invoiceId'],
|
|
cd['customerNumber'],
|
|
YANDEX_MONEY_SHOP_PASSWORD,
|
|
)).encode('utf-8')).hexdigest().upper()
|
|
|
|
|
|
@csrf_exempt
|
|
def aviso(request):
|
|
# Страница получения результата о платежах
|
|
data = request.POST
|
|
tmp = {}
|
|
for key, value in data.items():
|
|
tmp[key] = value
|
|
tmp = str(tmp)
|
|
_time = datetime.datetime.now()
|
|
_log = YandexKassaHistory.objects.create(text=tmp, _type='paymentAvisoResponse')
|
|
result = {
|
|
'performedDatetime': _time.isoformat(),
|
|
'code': '200',
|
|
'shopId': data.get('shopId'),
|
|
'invoiceId': data.get('invoiceId'),
|
|
'message': ''
|
|
}
|
|
if not data.get('md5'):
|
|
return render(request, 'yandexkassa_result.xml', {'check_type': 'paymentAvisoResponse', 'data': result},
|
|
content_type="application/xhtml+xml")
|
|
|
|
if data['md5'] == gen_md5(data):
|
|
try:
|
|
bill = Bill.objects.get(id=data['orderNumber'])
|
|
except Bill.DoesNotExist:
|
|
result['message'] = u'Не найден счет по указанным данным'
|
|
|
|
else:
|
|
if str(bill.user.id) == data['customerNumber']:
|
|
bill.status = 'F'
|
|
bill.real_price = data['shopSumAmount']
|
|
bill.out_id = data['invoiceId']
|
|
bill.status_changed = _time
|
|
bill.save()
|
|
result['code'] = '0'
|
|
|
|
else:
|
|
result['message'] = u'Не найден пользователь, указанный в запросе'
|
|
|
|
else:
|
|
result['code'] = '1'
|
|
result['message'] = u'Не сходится ключ платежа'
|
|
|
|
return render(request, 'yandexkassa_result.xml', {'check_type': 'paymentAvisoResponse', 'data': result},
|
|
content_type="application/xhtml+xml")
|
|
|
|
|
|
@csrf_exempt
|
|
def check(request):
|
|
# Страница получения результата о платежах
|
|
data = request.POST
|
|
_time = datetime.datetime.now()
|
|
tmp = {}
|
|
for key, value in data.items():
|
|
tmp[key] = value
|
|
tmp = str(tmp)
|
|
if data.get('action'):
|
|
YandexKassaHistory.objects.create(text=tmp, _type=data['action'])
|
|
else:
|
|
YandexKassaHistory.objects.create(text=tmp, _type='empty_check')
|
|
|
|
result = {
|
|
'performedDatetime': _time.isoformat(),
|
|
'code': '200' if data.get('action') == 'checkOrder' else '1',
|
|
'shopId': data.get('shopId'),
|
|
'orderSumAmount': data.get('orderSumAmount'),
|
|
'invoiceId': data.get('invoiceId'),
|
|
'message': ''
|
|
}
|
|
if not data.get('md5'):
|
|
return render(request, 'yandexkassa_result.xml',
|
|
{'check_type': 'checkOrderResponse',
|
|
'data': result},
|
|
content_type="application/xhtml+xml")
|
|
|
|
if data['md5'] == gen_md5(data):
|
|
try:
|
|
bill = Bill.objects.get(id=data['orderNumber'])
|
|
except Bill.DoesNotExist:
|
|
result['message'] = u'Не найден счет по указанным данным'
|
|
|
|
else:
|
|
|
|
if str(bill.user.id) == data['customerNumber']:
|
|
if data['action'] != 'checkOrder':
|
|
bill.status = 'B'
|
|
bill.out_id = data['invoiceId']
|
|
bill.status_changed = _time
|
|
bill._method = 'Y'
|
|
bill.inside_data = tmp
|
|
bill.test = True
|
|
bill.save()
|
|
result['code'] = '0'
|
|
|
|
else:
|
|
result['message'] = u'Не найден пользователь, указанный в запросе'
|
|
else:
|
|
result['code'] = '1'
|
|
result['message'] = u'Не сходится ключ платежа'
|
|
result['tech_message'] = str(data['md5']) + str('_') + str(gen_md5(data))
|
|
|
|
return render(request, 'yandexkassa_result.xml', {'check_type': 'checkOrderResponse' if data['action'] == 'checkOrder' else 'cancelOrderResponse', 'data': result},
|
|
content_type="application/xhtml+xml")
|
|
|