Как минимум не нужно предварительно отправлять POST-запрос на ваш сервер перед перенаправлением на платёжную страницу Modulbank. Вместо этого вычисления полей, таких как signature, могут происходить на вашем сервере, но сама форма должна отправляться непосредственно на сайт банка.
from django.shortcuts import render
from django.http import JsonResponse
import hashlib
import time
def calculate_signature(data, secret_key):
values = f"{data['amount']}{data['client_email']}{secret_key}"
signature = hashlib.sha1(values.encode()).hexdigest()
return signature
def payment_view(request):
if request.method == 'POST':
amount = request.POST.get('amount')
client_email = request.POST.get('client_email')
order_id = 14425840
secret_key = 'your_secret_key'
signature = calculate_signature({
'amount': amount,
'client_email': client_email
}, secret_key)
context = {
'amount': amount,
'client_email': client_email,
'order_id': order_id,
'signature': signature,
'merchant': 'ad25ef06-1824-413f-8ef1-c08115b9b979',
'success_url': 'http://yoursite.com/success'
}
return render(request, 'payment_form.html', context)
return render(request, 'payment_page.html')
<form method="post" action="https://pay.modulbank.ru/pay">
<input type="hidden" name="amount" value="{{ amount }}">
<input type="hidden" name="order_id" value="{{ order_id }}">
<input type="hidden" name="signature" value="{{ signature }}">
<input type="hidden" name="client_email" value="{{ client_email }}">
<input type="hidden" name="merchant" value="{{ merchant }}">
<input type="hidden" name="success_url" value="{{ success_url }}">
<input type="submit" value="Оплатить">
</form>