Для создания платежной формы в Django с использованием скрытых полей, вам нужно будет настроить форму и представление (view). Ниже приведены шаги, которые помогут вам создать такую форму и отправить POST-запрос на указанный адрес.
### Шаг 1: Настройка формы
Создайте файл `forms.py` в вашем приложении и определите там форму. В форме будут два видимых поля для ввода суммы и назначения, а также скрытые поля, значения которых будут рассчитываться на основе введенных данных.
```python
from django import forms
class PaymentForm(forms.Form):
amount = forms.DecimalField(label='Сумма', max_digits=10, decimal_places=2)
purpose = forms.CharField(label='Назначение', max_length=255)
email = forms.EmailField(label='Электронная почта')
# Скрытые поля
merchant_id = forms.CharField(widget=forms.HiddenInput(), initial="your_merchant_id")
transaction_id = forms.CharField(widget=forms.HiddenInput()) # Это может быть сгенерированный ID транзакции
```
### Шаг 2: Создание представления
Создайте представление, которое будет обрабатывать форму и перенаправлять данные на API банка.
```python
from django.shortcuts import render, redirect
from .forms import PaymentForm
import uuid # Для генерации уникального идентификатора транзакции
def payment_view(request):
if request.method == 'POST':
form = PaymentForm(request.POST)
if form.is_valid():
# Генерация уникального ID транзакции
form.cleaned_data['transaction_id'] = str(uuid.uuid4())
return render(request, 'payment_redirect.html', {'form': form})
else:
form = PaymentForm()
return render(request, 'payment.html', {'form': form})
```
### Шаг 3: Создание шаблонов
Создайте два шаблона: `payment.html` для отображения формы и `payment_redirect.html` для отправки данных на API банка.
**payment.html**
```html
<form method="post" action="{% url 'payment_view' %}">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Оплатить</button>
</form>
```
**payment_redirect.html**
```html
<form id="payment-form" method="POST" action="https://pay.modulbank.ru/pay">
{% csrf_token %}
<input type="hidden" name="amount" value="{{ form.cleaned_data.amount }}">
<input type="hidden" name="purpose" value="{{ form.cleaned_data.purpose }}">
<input type="hidden" name="email" value="{{ form.cleaned_data.email }}">
<input type="hidden" name="merchant_id" value="{{ form.cleaned_data.merchant_id }}">
<input type="hidden" name="transaction_id" value="{{ form.cleaned_data.transaction_id }}">
</form>
<script type="text/javascript">
document.getElementById('payment-form').submit();
</script>
```
### Шаг 4: Настройка URL
Не забудьте добавить URL для вашего представления в `urls.py`.
```python
from django.urls import path
from .views import payment_view
urlpatterns = [
path('payment/', payment_view, name='payment_view'),
]
```
### Примечания
1. Замените `your_merchant_id` на ваш настоящий идентификатор мерчанта.
2. Убедитесь, что в `settings.py` разрешены обработчики CSRF, если используете CSRF-токены.
3. Добавьте необходимую обработку ошибок и валидацию в вашу форму.
4. Вам возможно потребуется добавить другие параметры в POST-запрос, в зависимости от требований API банка. Убедитесь, что вы изучили документацию вашего банка для подтверждения всех необходимых полей.
Теперь у вас есть база для создания платежной формы и обработки данных с использованием Django!