На счет пополнения через Payeer
# Пополнение Payeer
@login_required
def popoln_payeer(request):
if request.method == "POST":
sum = Popoln_webForm(request.POST)
#Проверка валидации формы
if sum.is_valid():
#Получаю введенную сумму и проверяю хватает ли на личном счету
money = sum.cleaned_data['sum']
if money < 1:
messages.add_message(request, messages.ERROR, 'Введена не верная сумма. Минимум 1 руб.')
return redirect('sys_popol')
else:
#Настройка мерчанта и создание цифровой подписи
m_shop = "56565621"
m_orderid = str(user)
'''payerr требует что бы после точки было два знака. Моя форма передает запятую и 1 знак после'''
#в конце 0
money = str(money)+'0'
#Замена , на .
money = money.replace(',', '.')
cel = money.find('.')
#Два символа после точки
drob = cel + 3
m_amount = money[:drob]
m_curr = "RUB"
description = "Пополнение счета"
m_desc = base64.b64encode(description.encode('utf8')).decode('utf-8')
m_key = "DfdhD56io45"
#Спасибо Rad, помог с контрольной суммой для Python3
result_string = "{}:{}:{}:{}:{}:{}".format(m_shop, m_orderid, m_amount, m_curr, m_desc, m_key)
sign_hash = sha256(result_string.encode())
sing = sign_hash.hexdigest().upper()
#Запись в таблицу пополнения
#Передаем параметры в форму
return render(request, 'test/form.html', {'money': m_amount, 'user': m_orderid, 'description': m_desc, 'sing': sing})
else:
form = Popoln_webForm()
return render(request, 'test/popoln.html', {'form': form})
#Проверка и подтверждение оплаты Payeer
#Декоратор обязателен
@csrf_exempt
def deposit_result(request):
if not request.method == 'POST':
return HttpResponse("error")
retval = 'error'
#Если пришел ответ
if request.POST.get('m_operation_id', None) and request.POST.get('m_sign', None):
'''Контрольную сумму можно сделать через join, но мне нужно было еще некоторые проверки, поэтому такой способ.'''
m_operation_id = request.POST['m_operation_id']
m_operation_ps = request.POST['m_operation_ps']
m_operation_date = request.POST['m_operation_date']
m_operation_pay_date = request.POST['m_operation_pay_date']
m_shop = request.POST['m_shop']
m_orderid = request.POST['m_orderid']
m_amount = request.POST['m_amount']
m_curr = request.POST['m_curr']
m_desc = request.POST['m_desc']
m_status = request.POST['m_status']
m_key = "DfdhD56io45"
#Получаю контрольную сумму
result_string = "{}:{}:{}:{}:{}:{}".format(m_operation_id, m_operation_ps, m_operation_date, m_operation_pay_date,
m_status, m_shop, m_orderid, m_amount, m_curr, m_desc, m_status, m_key)
sign_hash = sha256(result_string.encode())
sing = sign_hash.hexdigest().upper()
#Совпадает сумма и прошла ли оплата
if request.POST.get('m_sign') == sing and request.POST.get('m_status') == 'success':
if #проверяем что нам нужно :
#К примеру пополняем счет на сайте
#Ответ что все верно
retval = m_orderid + "|success"
else:
retval = m_orderid + "|error"
else:
retval = m_orderid + "|error"
return HttpResponse(retval)
#Платеж принят payeer
@csrf_exempt
def payeer_success(request):
return render(request, 'test/success.html')
#Платеж не принят payeer
@csrf_exempt
def payeer_fail(request):
return render(request, 'test/payeer_fail.html')
Форма
<h5>Сумма пополнения {{money}} руб.</h5>
<form method="post" action="https://payeer.com/merchant/">
<input type="hidden" name="m_shop" value="56565621">
<input type="hidden" name="m_orderid" value="{{user}}">
<input type="hidden" name="m_amount" value="{{money}}">
<input type="hidden" name="m_curr" value="RUB">
<input type="hidden" name="m_desc" value="{{ description }}">
<input type="hidden" name="m_sign" value="{{ sing }}">
<input type="submit" value="Пополнить">
</form>
Updated 4 Feb. 2017, 10:09 by DJWOMS.