Я пытался скрыть процесс оформления заказа на моем сайте продавца, потому что я думаю, что процесс выбора шлюза оплаты до оплаты может сбить людей с толку.
Я искал много документов и почти неделю пытался понять и изменить коды, связанные с процессом оплаты. Это не увенчалось успехом из-за моего плохого понимания фреймворка django.
Пожалуйста, помогите мне и дайте мне знать некоторые подсказки о том, где и что я должен изучить. Если это возможно, научите меня, как настроить платежный шлюз по умолчанию и скрыть варианты выбора платежного шлюза.
Я думаю, что это связано с тремя файлами.
saleor / шаблоны / заказ / pavement.html
Изменяя шаблон дорожного покрытия, мне удается создать платежный шлюз по умолчанию и скрыть переключатели, но всякий раз, когда он был скрыт, обработка платежа также не выполнялась (При успешной оплате URL должен быть изменен с 'http://127.0.0.1:8000/ko/order/[ токена заказа] / payment / 'to' http://127.0.0.1:8000/ko/order/[ токен заказа] / payment / [имя платежного шлюза] / 'но когда я скрыл переключатель, URL не был изменен.)
saleor / saleor / заказ / views.py
saleor / saleor / заказ / forms.py
Я догадался, что информация о шлюзе платежей переносится из payment.html в функцию start_payment из views.py и в некоторой степени относится к классу PaymentsForms в forms.py. Я пытался проанализировать и понять эти коды, но я застрял.
некоторая часть кода в 'saleor / templates / order / pavement.html'
<h3>
<b>{% trans "Choose payment method" %}</b>
</h3>
<div class="checkout__payment-form">
<form method="post" action="{% url "order:payment" token=order.token %}" class="payment-form radio">
{% csrf_token %}
{% for choice in payment_form.gateway %}
<div class="radio checkout__payment-form__choice">
<label>
<div class="card card-default">
<div class="card-body">
<strong>
{{choice}}
</strong>
</div>
</div>
</label>
</div>
{% endfor %}
{% block form_submit %}
<button type="submit" class="btn btn-primary">
{% trans "Proceed to payment" context "Payment details primary action" %}
</button>
{% endblock %}
</form>
</div>
Функция 'start_payment' в 'saleor / saleor / order / views.py'
@check_order_status
def start_payment(request, order, gateway):
payment_gateway, connection_params = get_payment_gateway(gateway)
#payment_gateway, connection_params = get_payment_gateway('Dummy gateway')
extra_data = {'customer_user_agent': request.META.get('HTTP_USER_AGENT')}
with transaction.atomic():
payment = create_payment(
gateway=gateway,
currency=order.total.gross.currency,
email=order.user_email,
billing_address=order.billing_address,
customer_ip_address=get_client_ip(request),
total=order.total.gross.amount,
order=order,
extra_data=extra_data)
if (order.is_fully_paid()
or payment.charge_status == ChargeStatus.FULLY_REFUNDED):
return redirect(order.get_absolute_url())
payment_info = create_payment_information(payment)
form = payment_gateway.create_form(
data=request.POST or None,
payment_information=payment_info,
connection_params=connection_params)
if form.is_valid():
try:
gateway_process_payment(
payment=payment, payment_token=form.get_payment_token())
except Exception as exc:
form.add_error(None, str(exc))
else:
if order.is_fully_paid():
return redirect('order:payment-success', token=order.token)
return redirect(order.get_absolute_url())
client_token = payment_gateway.get_client_token(
connection_params=connection_params)
ctx = {
'form': form,
'payment': payment,
'client_token': client_token,
'order': order}
return TemplateResponse(request, payment_gateway.TEMPLATE_PATH, ctx)
Класс 'PaymentsForms' в 'saleor / saleor / order / forms.py'
PAYMENT_CHOICES = [
(k, v) for k, v in settings.CHECKOUT_PAYMENT_GATEWAYS.items()]
class PaymentsForm(forms.Form):
gateway = forms.ChoiceField(
label=pgettext_lazy('Payments form label', 'Payment Method'),
choices=PAYMENT_CHOICES,
initial=PAYMENT_CHOICES[0][0],
widget=forms.RadioSelect)
Я попытался установить платежный шлюз по умолчанию и скрыть окно радио для выбора платежных шлюзов, но не удалось.