在 Django 应用程序中实现 PayPal IPN

Posted

技术标签:

【中文标题】在 Django 应用程序中实现 PayPal IPN【英文标题】:implementing PayPal IPN in Django Application 【发布时间】:2018-06-12 12:06:50 【问题描述】:

我正在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" >
<img  border="0" src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif"  >
</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页面。

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

我已经在paypal sandbox accoun 的设置中启用了instant payment notification https://example.com/paypal-ipn/

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

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

如何在 Rails 应用程序中实现 Paypal Rest API

Django Paypal 集成 createOrder curl

在 Rails 中实现我们的计费系统:Paypal、纯商家帐户/网关,还是 Chargify 之类的?

我想在 Rails 中实现 PayPal Digital Goods Express Checkout API

如何使用api在codeigniter中实现paypal定期付款

如何使用 c# 在 paypal 中实现 DoDirectPayment