Не могу найти, как правильно реализовать django-paypal

#python #django #django-forms #paypal-ipn #django-paypal

#python #django #django-forms #paypal-ipn #django-paypal

Вопрос:

Я знаю, как должна работать система django paypal. Я стараюсь следовать приведенным здесь инструкциям: https://django-paypal.readthedocs.io/en/stable/standard/ipn.html

Моя проблема в том, что я не понимаю большую часть этого. Это то, что у меня есть:

views.py

 from django.core.urlresolvers import reverse
from django.shortcuts import render
from paypal.standard.forms import PayPalPaymentsForm
from .models import Subs
from .forms import SubForm
from django.shortcuts import redirect
from forum.views import home
from django.urls import reverse


def BuyShit(request):
    user = request.user
    if request.method == "POST":
        formbuy = SubForm(request.POST)
        if formbuy.is_valid() and 'buy' in request.POST:
            sub = formbuy.save(commit=False)
            sub.owner = user
            sub.save()
            order_created.delay(sub.id)
            request.session['order_id'] = sub.id
            return redirect(home)
  

forms.py

 from django import forms
from .models import Subs

class SubForm(forms.ModelForm):
    class Meta:
        model = Subs

        fields = ('item','price')

  

models.py

 from django.db import models
from forum.models import Post
from django.contrib.auth.models import User
# Create your models here.

class Subs(models.Model):
    item = models.Charfield(max_length=55, verbose_name='item')
    price = models.Charfield(max_length=55, verbose_name='item')
    owner = models.Charfield(User, max_length=55, verbose_name='item')
  

Я также добавил соответствующие настройки и URL для paypal:

  url(r'^paypal/', include('paypal.standard.ipn.urls')),
  

По ссылке на django-paypal у них есть это в views.py:

 from django.core.urlresolvers import reverse
from django.shortcuts import render
from paypal.standard.forms import PayPalPaymentsForm

def view_that_asks_for_money(request):

    # What you want the button to do.
    paypal_dict = {
        "business": "receiver_email@example.com",
        "amount": "10000000.00",
        "item_name": "name of the item",
        "invoice": "unique-invoice-id",
        "notify_url": request.build_absolute_uri(reverse('paypal-ipn')),
        "return": request.build_absolute_uri(reverse('your-return-view')),
        "cancel_return": request.build_absolute_uri(reverse('your-cancel-view')),
        "custom": "premium_plan",  # Custom command to correlate to some function later (optional)
    }

    # Create the instance.
    form = PayPalPaymentsForm(initial=paypal_dict)
    context = {"form": form}
    return render(request, "payment.html", context)
  

Какую его часть я использую? куда мне добавить, сколько это стоит или название?

Тогда есть перехваты.дело в том, что я действительно не понимаю, как это работает:

 from paypal.standard.models import ST_PP_COMPLETED
from paypal.standard.ipn.signals import valid_ipn_received

def show_me_the_money(sender, **kwargs):
    ipn_obj = sender
    if ipn_obj.payment_status == ST_PP_COMPLETED:
        # WARNING !
        # Check that the receiver email is the same we previously
        # set on the `business` field. (The user could tamper with
        # that fields on the payment form before it goes to PayPal)
        if ipn_obj.receiver_email != "receiver_email@example.com":
            # Not a valid payment
            return

        # ALSO: for the same reason, you need to check the amount
        # received, `custom` etc. are all what you expect or what
        # is allowed.

        # Undertake some action depending upon `ipn_obj`.
        if ipn_obj.custom == "premium_plan":
            price = ...
        else:
            price = ...

        if ipn_obj.mc_gross == price and ipn_obj.mc_currency == 'USD':
            ...
    else:
        #...

valid_ipn_received.connect(show_me_the_money)
  

Все компоненты кажутся несовместимыми. Я знаком с django, но это кажется совершенно другим.
Я полностью потерян. И учебные пособия онлайн ужасны. Пожалуйста, помогите!!! Мне просто нужно добавить кнопку для покупки одного продукта и при успешном запуске функции для изменения соответствующей модели. Звучит просто….. Спасибо за любую помощь!!!!!