You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中无法自动触发服务层PayPal IPN订阅支付处理函数问题

Django集成PayPal IPN自动触发订阅支付处理函数的问题与解决方案

我是一名新手程序员,正在尝试为项目集成PayPal IPN,实现定期订阅支付功能。

我编写了一个在控制台中运行正常的函数,但我不知道如何让该函数自动触发执行。对我而言理想的方案是:当PayPal数据表中出现我需要的目标数据时,IPN函数可以自动启动并执行我所需的操作。

例如,当数据表中出现满足以下查询条件的记录时:

ipn = PayPalIPN.objects.filter(payment_status='Completed').order_by("-pk")[:20]

我的函数就会启动,遍历表中数据并执行我需要的操作。

我尝试过以下几种方案:

def Check_1():
    if ipn.exists():
        return Subscription()

def Check_2():
    if ipn.count() > 0:
        return Subscription()

def Check_3():
    if len(ipn) > 0:
        return Subscription()

在控制台中运行时,Subscription()函数可以正常启动并执行,但当我将这段代码写在服务层的Python文件中时,没有任何效果,我不知道该如何触发它运行。

我尝试在views.py的类视图中调用Subscription()函数的代码如下:

class Successful_payment(ListView):
    model = Odin
    template_name = "successful_payment.html"
    context_object_name = 'successful_payment'

    ipn = PayPalIPN.objects.filter(payment_status='Completed').order_by("-pk")[:20]

    if len(ipn) > 0:
        Subscription()

结果是该函数仅在服务器重启时执行一次,当用户访问successful_payment.html页面时,函数不会被调用执行。

Subscription()函数本身的代码如下:

def Subscription():
    for z in ipn:
        user_z = User.objects.get(id=(int(z.custom)))
        if z.payment_gross == 25:
            user_z.paid_until = plus_days(count='monthly')
            user_z.save()
        z.save()

最终解决方案

通过重写类视图的get_context_data方法解决了该问题:

def get_context_data(self, *args, **kwargs):
    context = super().get_context_data(*args, **kwargs)
    ipn = PayPalIPN.objects.filter(payment_status='Completed').order_by("-pk")[:20]
    Podpiska(ipn)
    return context

内容的提问来源于stack exchange,提问作者boris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:30:01