使用Paypal IPN进行订阅

56

我正在使用Paypal IPN为网站添加订阅功能,效果非常好。我可以成功地创建新的订阅并进行验证。这个订阅有两周的免费试用期。不幸的是,指南在订阅状态方面有点模糊。

目前,用户帐户在接收到subscr_signup或subscr_payment后会获得订阅状态,并在接收到subscr_cancel或subscr_failed时删除。我认为这是正确的,但最好确保一下。

另外,subscr_eot是什么?IPN指南将其描述为“订阅结束”。这是否会在试用期结束后触发?

4个回答

81

subscr_eot 当用户的最后一个付费周期过期时发送。 subscr_cancel 会在用户取消订阅时立即发送-例如:

用户在第1天注册按月计费的订阅。 subscr_signup 立即发送,subscr_payment 在付款成功后立即发送(通常也是立即)。

在第13天,用户取消了订阅。尽管用户实际上已经支付到第30天,但subscr_cancel 会立即发送。此时是否取消取决于您。

在第30天,将发送subscr_eot - 用户已取消订阅,并且这是他最后一次付款的截止日期。

试用订阅没有太多变化-如果用户在试用订阅结束之前取消订阅,则会立即发送subscr_cancel,并在试用结束时发送subscr_eot


我不确定这一定是正确的。我认为这取决于他们拥有的订阅类型,比如I/S等。 - ajbeaven
3
补充一下,据我所知,如果您没有进行免费试用,则只有在第一笔付款成功后才会发送“subscr_signup”。因此,您可以通过仅侦听“subscr_signup”和“subscr_eot”来激活/取消订阅。 - Webcognoscere
@Peter,在订阅到期后,我们是要求用户重新注册订阅还是修改现有的订阅?因此,在到期后,应该使用subscr_modify还是subscr_signup。对于已取消的用户呢? - Basit
@Webcognoscere,除非是免费试用,否则只有在收到款项后才应激活订阅。 - user207421
这是一个非常有帮助的答案,我希望PayPal文档能够像这样表达。 - quemeful
显示剩余4条评论

38

另外一个有趣的细节是关于 subscr_eot 如何与 subscr_failed 协作。

看起来 subscr_eot 在最后一次 FINALsubscr_failed 后面。所以如果在您的帐户中设置了自动重试失败的支付 3 次,那么应该是这样的:

第一次失败的付款 => subscr_failed 第二次失败的付款 => subscr_failed 第三次失败的付款 => subscr_failed 和 subscr_eot

因此,基本上在您的代码中,您可以将 subscr_failed 设置为触发电子邮件,例如

嗨,用户, 请稍微花点时间检查您的付款信息,您可能需要更新信用卡过期日期等。您仍然可以访问,我们将在几天后再试一次。

并设置 subscr_eot 来实际关闭他们的订阅并触发像这样的电子邮件

很抱歉,我们仍然没有收到付款并已将您的个人资料下架。您仍然可以通过登录并更新您的付款信息来重新激活它

基本上,这是“好”的方式,以便客户有一个宽限期,并且由于过期的信用卡或其他原因而意外关闭他们的帐户。


失败的付款和发送订阅结束通知是否仍像2009年那样工作? - ajbeaven
@ajbeaven:看起来自4月份更新以来,该信息仍然是最新的。 - Brett
@BrainArmstrong 在订阅期结束后,我们是要求用户再次订阅还是修改现有的订阅?因此,在订阅期结束后,应该是 subscr_modify 还是 subscr_signup。对于已取消订阅的用户呢? - Basit
subscr_eot不是最终状态。(过去可能是这样)但就在今天,我可以确认subscr_eot发生在subscr_cancel之前。为了确认:subscr_cancel是最终的、无法更改的状态。subscr_eot似乎发生在订阅到期时,然而,用户可以续订,并且subscr_payment可能会在此之后不久发送。请参考2023年的官方文档:https://developer.paypal.com/api/nvp-soap/ipn/IPNandPDTVariables/ - undefined

10

Chris发布的帖子最近有更新。

在2010年左右,PayPal停止使用subscr_eot,当用户取消账户时。在收到一些投诉后,他们恢复了此功能,但用了6个月的时间才做到。这意味着您可以像Peter在已接受的答案中描述的那样再次处理订阅通知。

来自PayPal代表的声明:

subscr_cancel表示档案已取消,不会进行未来付款。但是,如果买家已支付当前的计费周期,因为他们是预先收费的,那么您可以使用subscr_eot终止档案。

然而,在多次付款失败的情况下会发生什么还不确定。目前PayPal的文档非常糟糕。


4
当然。关于API/IPN相关的东西,很少有权威的文档,而且现有的文档通常会被其他文档或所谓的现实所否定。 - Asherah
1
是的,就像那一天的付款 IPN 发生在注册 IPN 之前一样 :D - Sebas
你是正确的。在这种情况下,你的答案现在是正确的。之前选择的答案在14年前是正确的,但我可以确认,今天我使用了一些可以说是“经典的网络软件”,subscr_eot发生在subscr_cancel之前。 - undefined

2

如果账户是新的或不是新的,是否发送subscr_eot取决于账户本身,这有点超出了我的理解范围。

我还没有找到正确的管理订阅的方法。如果付款有延迟,服务器上计算日期可能会非常快地出错。


此评论应该被删除或替换为链接:https://developer.paypal.com/api/nvp-soap/ipn/IPNandPDTVariables/ - undefined

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