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
相关产品推荐
相关产品推荐

