在Django应用程序中实现PayPal IPN

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Django应用程序中实现PayPal IPN相关的知识,希望对你有一定的参考价值。

我在Django 2.0写一个应用程序

这是一个多会员申请。我必须实施PayPal付款方式并根据收到的付款激活会员资格。

为此,我在PayPal中创建了一个按钮,生成代码为

upgrade.html

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="<button-id>">
<input type="image" src="https://www.sandbox.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

和views.py是

class Pricing(TemplateView):
    template_name = 'membership/pricing.html'


class Upgrade(TemplateView):
    template_name = 'membership/upgrade.html'


class PaymentSuccess(TemplateView):
    template_name = 'membership/payment-success.html'


class PaymentFailed(TemplateView):
    template_name = 'membership/payment-failed.html'


def paypal_ipn(request):
    # IPN response goes here

和urls.py

urlpatterns = [
    path('pricing/', Pricing.as_view(), name='pricing'),
    path('upgrade/', Upgrade.as_view(), name='upgrade'),
    path('payment-success/', PaymentSuccess.as_view(), name='payment-success'),
    path('payment-failed/', PaymentFailed.as_view(), name='payment-failed'),
    path('paypal-ipn/', paypal_ipn, name='paypal-ipn'),
]

一切正常,因为付款正在进行,用户被重定向到payment-success页面。

但是,我如何收到付款确认,以便我可以处理会员资格并在数据库中记录交易数据?

我在网址instant payment notification上的paypal sandbox accoun设置启用了https://example.com/paypal-ipn/

由于某些限制,我不想使用django-paypal插件。

答案

您可以创建自己的IPN处理页面以接收PayPal IPN消息。 IPN示例代码如下。

https://github.com/paypal/ipn-code-samples

以上是关于在Django应用程序中实现PayPal IPN的主要内容,如果未能解决你的问题,请参考以下文章

Paypal 在 Wicket 应用程序中的 IPN

为啥Paypal在使用django-paypal时会重试IPN

如何在Android上将多个参数传递给IPN url到PayPal?

如何在 Rails 中实现 Paypal 回调? (获取 InvalidAuthenticityToken 错误)

将 Paypal IPN 与 Django 集成

Paypal 发送了 IPN 的警告电子邮件