Как интегрировать полосовой платеж с существующей формой django, и сохранить форму только при успешной оплате - PullRequest
1 голос
/ 10 марта 2019

У меня есть, как мне кажется, довольно стандартная установка, приложение электронной коммерции с корзиной для покупок и возможность хранить заказы в локальной базе данных (нужно было знать, какие товары заказывать у оптовика и куда их доставлять).

На данный момент все эти функции работают отлично.Моя «касса» на данный момент позволяет клиенту вводить свои данные, а затем заказ сохраняется, причем каждый заказ имеет несколько позиций заказа.

Я хочу использовать эту форму, чтобы отправить некоторые изинформацию для чередования, и если токен получен обратно с указанием успеха, сохраните некоторые (но не все) поля в локальную базу данных.

Я не пытаюсь сохранить данные CC локально или что-то в этом роде, я 'Я хорошо осведомлен о рисках безопасности и юридических обязательствах, таких как соответствие PCI.

Я просто хочу иметь одну форму, которую клиенты могут использовать для ввода своих данных, и нажимать кнопку оплаты (как у большинства сайтов электронной коммерции), а не иметь одну.форма для ввода данных и другая форма для оплаты.

Документация django-stripe остро отсутствует, а в документации Stripe API есть только примеры для ruby-фреймворков и javascript, ничего для django.

Возможно ли то, что я хочу сделать, и если да, то каков правильный подход?

Я могу публиковать свои модели, формы, viEWS и шаблоны фрагментов, если это необходимо, но это, кажется, логика и вопрос подхода больше, чем вопрос, специфичный для кода.

1 Ответ

0 голосов
/ 10 марта 2019

Воспользовавшись Stripe, он действительно имеет потрясающую документацию. То, что вы ищете, находится в разделе charge в справочнике Stripe API . Вам также необходимо создать токен (может быть выполнен на стороне сервера через HTTPS или на стороне клиента через JS).

То, что вы хотите сделать, это сначала взимать плату с пользователя через Stripe, и, если ответ успешен, ввести информацию о заказе в вашу базу данных.

Пример будет выглядеть так:

from django.views.generic import View
import stripe
stripe.api_key = "sk_test_KEY_HERE"


class PaymentView(View):
    def post(self, request, *args, **kwargs):
        card_num = request.POST['card_num']
        exp_month = request.POST['exp_month']
        exp_year = request.POST['exp_year']
        cvc = request.POST['cvc']

        token = stripe.Token.create(
          card={
            "number": card_num,
            "exp_month": int(exp_month),
            "exp_year": int(exp_year),
            "cvc": cvc
          },
        )

        charge = stripe.Charge.create(
          amount=2000,
          currency="usd",
          source=token,  # obtained above
          #source="tok_visa", # obtained with Stripe.js (JS)
          description="Charge for jenny.rosen@example.com"
        )

        if charge['captured'] == True:
            Sale.objects.create(product=product, amount=amount)
            return redirect('app:success_page')

        return redirect('app:fail_page')
...