Paypal订阅IPN – 用户订阅多次的问题

我正在使用paypal订阅和即时付款通知(IPN)来处理我网站上的订阅者。

在大多数情况下它运作良好,但我遇到了一个偶然的问题。

通常,如果用户取消订阅,我会在禁用对我的网站的访问权限之前等待“期末结束”(subscr_eot)通知。

因此,如果他们预付整个月,然后立即取消,他们仍然可以访问该月剩余时间(应该是)。

但是有些用户遇到这个问题:

  1. 取消订阅
  2. 在达到“期末”之前,他们决定重新订阅
  3. 当第一次订阅达到“期末”时,我的应用会收到通知并向用户发送一封电子邮件,其中包含“您的帐户已被停用,如果您想再次注册,则可以重新注册点击这里订阅“。
  4. 这让他们感到困惑,因为他们在思考……这很奇怪,我以为我订阅的时候就像一周前一样(而且他们确实如此)。 所以他们再订阅了。 现在他们有两个并发运行订阅到我的网站,我在一两个月内收到一封支持电子邮件(“你本月两次给我收费两次!”)

所以我还没有找到解决这个问题的好办法。 我想最好的解决方案是在收到“期末”通知时再做一次API调用,这会通知paypal“嘿,这个人已经重新订阅了吗?”。 如果是这样,则无需启动该电子邮件。 但是我还没有看到任何方法来进行这个API调用。

另一个解决方案是在他们取消时立即禁用他们的帐户(“subscr_cancel”通知),但后来我得到了不同的愤怒支持电子邮件“嘿我为整个月预付了为什么我的帐户已经被禁用!!”。

其他人解决了这个?

我知道这是一个老线程,但我还没有看到这个问题的实际答案,所以如果有人碰巧像我这样想到这一点,这里有一个解决方案。

如果有人在他们的学期结束(subscr_eot)之前取消他们的帐户(subscr_cancel),我会在我的数据库中设置它来处理它。 例如,如果数据库中有“用户”表,只需添加一个新的“int”字段并将其命名为“Term”。 默认情况下,此字段应设置为“0”。 然后,在IPN内部进行设置,以便如果用户在术语结束前取消订阅,则会将该用户的“Term”字段设置为“1”。 如果该用户返回并重新订阅您的服务,请让IPN将该用户的“Term”字段更新回“0”。

然后,在您的邮件脚本内部,只需检查该用户运行到期末的“Term”字段。 如果设置为“0”,则不发送电子邮件。 如果设置为“1”,则发送电子邮件说“Adios!”

据我所知,如果您使用网站支付标准/专业按钮,我认为没有贝宝api来检查订阅。

我通过在我的数据库中保持active / cancel / resubscribe状态来处理这个问题,并根据我从paypal获得的IPN消息更新状态。 我使用按钮中的custom字段将IPN消息映射到我的用途,该字段在每个IPN消息上发回。

还有很多第三方可以帮助你管理这个过程,因为paypal的api在这方面有点弱。 反过来,我已经看过并计划实施,还有其他人也在实施。

引用: Re:什么时候发出subscr_eot?

如果您在2009年11月之后开始接受订阅,则订阅者ID将开始“我 – ” – 并且在他们的时间结束时不会返回“subscr_eot”。 Paypal希望您记下他们订阅的时间,并在该期限到期时更新帐户以降级(或其他),除非客户在此期间再次付款。

如何防止重复的PayPal付款?

您可能希望为“invoice”参数添加唯一标识符; 并在您的帐户www.paypal.com上的“个人资料”>“我的销售工具”部分中启用“阻止重复付款”