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

# 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")