剩余天数取消 PayPal 定期付款

Posted

技术标签:

【中文标题】剩余天数取消 PayPal 定期付款【英文标题】:PayPal recurring payment cancelled with remaining days 【发布时间】:2012-05-26 06:37:11 【问题描述】:

我是订阅会员,但是遇到了以下问题:

    用户于 2012 年 5 月 1 日订阅,每月无限期付款。 IPN 发送到服务器,激活订阅 用户于 2012 年 5 月 3 日取消。 IPN 已发送至服务器,订阅已取消,服务器已取消会员资格。

但是,由于用户在 2012 年 5 月 1 日订阅,如果要在一个月前取消,他还有几天的时间。有什么办法可以解决这个问题? PayPal 是否会针对此类问题发送任何 IPN?

我想到的一个解决方案是每天晚上做一个 cronjob 来检查这个月是否到了。

【问题讨论】:

【参考方案1】:

当我们在自己的网站上实现订阅服务时,我们基本上是这样处理事件的:

订阅确认 - 我们将用户在我们服务器上的订阅标记为“自动续订” 收到的款项 - 我们根据商定的期限(每月或每年)移动用户的订阅到期日期;使用试用期,只有在试用期结束时才会发送此事件 订阅取消 - 我们将用户在我们服务器上的订阅标记为“手动续订” 退款 - 我们会根据商定的期限将用户的订阅到期日期向后移动。

在用户登录时,我们会检查订阅是否已过期(如果您将其存储在数据库中,这很容易)。

基本上,订阅事件与付款事件是分开的。订阅可以取消,但这并不意味着付款会被退还;那将是一个单独的事件。

顺便说一句,支付和订阅事件可以以不同的顺序出现(例如,可以先支付,然后是订阅通知);满足这一点很重要。

【讨论】:

【参考方案2】:

当用户订阅时,paypal 将创建一个定期付款配置文件,这意味着用户必须在订阅之日(例如 5 月 1 日、6 月 1 日、 7 月 1 日)。 当用户取消时,他取消了支付配置文件,而不是支付本身。所以在那之后贝宝不会要求任何其他付款。如果您想为用户提供剩余天数,您必须存储有关订阅的信息。

您可以将他订阅的日期和取消的日期存储在数据库中。从那里您可以知道用户还有多少天。 Paypal 在创建定期付款配置文件时、付款本身以及取消时都会发送 IPN 消息。

您可以在此处找到有关 IPN 消息的信息: https://cms.paypal.com/cms_content/US/en_US/files/developer/IPNGuide.pdf

【讨论】:

至少我可以有理由拒绝投票吗? (只是为了从我的错误中吸取教训)【参考方案3】:

IPN 消息中的一对 D/V 是 next_payment_date,后跟如下所示的日期:2013 年 7 月 6 日 03:00:00 PDT

除了 IPN 消息中的 profile_status 值之外,我将日期转换为 YYYY-MM-DD 并将其存储在数据库中。当个人订阅时,我在数据库中还有一个简单的 TRUE/FALSE 订阅者单元格。

因此,如果订阅者取消,他们的 profile_status 在数据库中更新为“已取消”,subscriber 单元格更新为 FALSE。

当用户访问优质内容时,数据库中的 subscriber 单元格会被检查为 TRUE。如果是这样,他们就会得到内容。如果为 FALSE,则检查 profile_status 单元格,如果该单元格为“已过期”或 NULL,则它们不会获得内容。如果单元格的内容为“已取消”,则提取 next_payment_date 数据,添加一天(以处理时区问题),如果大于当前时间,则加载优质内容。如果它小于当前日期,则他们的 profile_status 单元格将更新为“已过期”并且他们不会获得内容。

【讨论】:

【参考方案4】:

这是一个相当老的问题(2012 年),但我在 2019 年寻找该信息时能够通过谷歌搜索它。

目前,用于取消付款的 PayPal webhook 包括下一次付款的日期。这意味着您可以将用户状态标记为已取消,并将其帐户到期日期设置为下一个付款日期。

相关信息在.resource.billing_info.next_billing_time里面

【讨论】:

以上是关于剩余天数取消 PayPal 定期付款的主要内容,如果未能解决你的问题,请参考以下文章

PayPal 定期付款 - 不允许取消配置文件

取消 Paypal 沙盒定期付款

如果用户没有余额,带有初始付款的 Paypal 定期付款会创建并立即取消

在 Paypal Standard 中停止 Paypal 定期付款

通过 Paypal 的 API 取消定期付款

如果用户付款或取消定期付款,Paypal IPN 会发送信息