Задать вопрос
Ответы пользователя по тегу Веб-разработка
  • Как отправить форму со скрытыми полями Django, значения в которых должны вычислятся на основе не скрытых полей?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Как минимум не нужно предварительно отправлять 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>
    Ответ написан