PayPal自动付款取消,剩余天数?

7
我有一个订阅会员制,但是我遇到了以下问题:
  1. 用户在2012年5月1日订阅了每月无限期的付款。
  2. IPN发送到服务器,激活了订阅。
  3. 用户在2012年5月3日取消了订阅。
  4. IPN发送到服务器,订阅被取消并且服务器取消了会员资格。
然而,由于用户在2012年5月1日订阅,如果他在一个月之前取消订阅,他仍然剩下一些天数。有什么办法解决这个问题吗?PayPal是否会发送任何IPN来处理这种问题?
我想到的一个解决方案是每晚运行cronjob以检查是否已经过了一个月。
4个回答

4
当我们在自己的网站上实现订阅服务时,我们基本上会这样处理事件:
- 订阅确认 - 我们将用户的订阅标记为“自动续订”。 - 收到付款 - 我们根据约定的期限(每月或每年)移动用户的订阅到期日期;对于试用期,只有当试用期结束后才会发送此事件。 - 取消订阅 - 我们将用户的订阅标记为“手动续订”。 - 退款 - 我们根据约定的期限将用户的订阅到期日期后移。
在用户登录时,我们会检查订阅是否已过期(如果您在数据库中存储了订阅信息,这很容易实现)。
基本上,订阅事件与付款事件是分开的。订阅可以被取消,但这并不意味着付款会被退还,这将是一个单独的事件。
顺便说一下,付款和订阅事件可能以不同的顺序发生(例如,付款可能先到达,然后是订阅通知),因此重要的是要注意这一点。

2
用户订阅时,PayPal会创建一个自动付款配置文件,这意味着用户每月(每年、每日取决于配置文件)需在订阅日(如5月1日、6月1日、7月1日等)支付金额。
当用户取消订阅时,取消的是付款配置文件,而不是支付本身。因此,之后PayPal将不再要求进行任何其他支付。如果您想提供剩余天数给用户,则需要存储有关订阅的信息。
您可以在数据库中存储用户订阅日期和取消日期。从那里,您可以确定用户仍然有多少天时间。PayPal发送IPN消息,无论是在创建自动付款配置文件、在付款本身还是在取消时都会进行发送。
您可以在此处找到有关IPN消息的信息: https://cms.paypal.com/cms_content/US/en_US/files/developer/IPNGuide.pdf

至少可以告诉我为什么被踩吗?(只是想从中学习) - zolipapa

1
这是一个相当古老的问题(2012年),但在2019年寻找信息时,我仍然可以通过谷歌搜索找到它。
现在,PayPal取消付款的webhook包括下一次付款的日期。这意味着您可以将用户状态标记为已取消,并将其帐户到期日期设置为下一次付款日期。
相关信息位于.resource.billing_info.next_billing_time中。

1
在IPN消息中的D/V对之一是next_payment_date,后面跟着一个日期,格式如下:03:00:00 Jul 06, 2013 PDT 我将日期转换为YYYY-MM-DD格式,并将其存储在数据库中,除了IPN消息中提供的profile_status值。当个人订阅时,我还在数据库中拥有一个简单的TRUE / FALSE订阅者单元格。
因此,如果订阅者取消订阅,则他们的profile_status会在数据库中更新为“已取消”,并且订阅者单元格会更新为FALSE。
当用户访问高级内容时,将检查数据库中的“订阅者”单元格是否为TRUE。如果是,则他们可以获得内容。如果为FALSE,则会检查“profile_status”单元格,如果该单元格为“Expired”或NULL,则他们无法获取内容。如果单元格的内容为“Cancelled”,则会提取“next_payment_date”数据,加上一天(以解决时区问题),如果大于当前时间,则加载高级内容。如果小于当前日期,则更新其“profile_status”单元格为“Expired”,并且他们无法获取内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接