1

我正在尝试在我的项目中创建一个简单的 Paypal 支付,只是为了看看它是否有效,然后让它更加自定义。问题是它不像我预期的那样工作。当我付款(使用沙盒)时,myemail-buyer@gmail.com 成功汇款,但 myemail-facilitator 没有任何通知(但收到了钱)。此外,没有收到任何信号,并且Paypal IPNSDjango-admin 中没有任何行Paypal IPNs

可能有很多事情,因为我是 django-paypal 的新手,所以我不知道有什么问题。

我正在使用开发服务器,但可以从外部访问它。

看法

def payment(request):
    items = Job.get_unpaid_orders_for_user(request.user)
    table = PaymentTable(items)
    total_price = 0
    payment = Payment.objects.create()
    for item in items:
        if item.invoice.final_price:
            payment.invoices.add(item.invoice)
            total_price += item.invoice.final_price
    payment.total_price = total_price
    payment.save()

    context = {}
    context['items'] = items
    context['table'] = table
    context['total_price'] = total_price

    paypal_dict = {
        "business": "myemail-facilitator@gmail.com",
        "currency_code":"EUR",
        "amount": total_price,
        "item_name": payment.get_desc(),
        "invoice": payment.payment_identifier,
        "notify_url": "http://my_public_ip:8000/" + reverse('paypal-ipn'),
        "return_url": "http://my_public_ip:8000/return",
        "cancel_return": "http://my_public_ip:8000/cancel",
        "custom": "Upgrade all users!",  # Custom command to correlate to some function later (optional)
    }

    form = PayPalPaymentsForm(initial=paypal_dict)
    context["form"]=form
    return render(request, "ordersapp/payment/payment.html", context=context)

ORDERSAPP 的模型底部.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
    print ipn_obj
    try:
        print ipn_obj.__dict__
    except: print ipn_obj.__dict__()
    if ipn_obj.payment_status == ST_PP_COMPLETED:
        # WARNING !
        # Check that the receiver email is the same we previously
        # set on the business field request. (The user could tamper
        # with those fields on payment form before send it 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 etc. are all what you expect.

        # Undertake some action depending upon `ipn_obj`.
        if ipn_obj.custom == "Upgrade all users!":
            # Users.objects.update(paid=True)
            print 'PAYMENT OK'
    else:
        print 'BAD'
        #...

valid_ipn_received.connect(show_me_the_money)

设置.py

INSTALLED_APPS = (

    'django.contrib.auth',
    'mainapp',
    'django.contrib.admin',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.sites',
    'django.contrib.staticfiles',
    ....
    ....
    'paypal',
    'paypal.standard.ipn'

)

PAYPAL_RECEIVER_EMAIL = "myemail-facilitator@gmail.com"
PAYPAL_TEST = True
4

0 回答 0