Не могу найти, как правильно реализовать django-paypal - PullRequest
1 голос
/ 26 марта 2019

Я знаю, как должна работать система PayPal Django. Я пытаюсь следовать инструкциям здесь: 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)

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

Тогда есть вещь hooks.py, которую я действительно не понимаю, как это работает:

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, но это кажется совсем другим. Я полностью потерян. И учебники онлайн ужасны. Пожалуйста помоги!!! Мне просто нужно добавить кнопку, чтобы купить один продукт, и в случае успеха вызвать функцию для изменения соответствующей модели. Звучит просто ..... Спасибо за любую помощь !!!!!

...