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