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

时间:2010-03-27 00:45:54

标签: ruby-on-rails paypal paypal-ipn paypal-subscriptions

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

在大多数情况下,它运作良好,但偶尔会遇到一个问题。

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

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

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

  1. 取消订阅
  2. 在达到“学期结束”之前,他们决定重新订阅
  3. 当第一次订阅达到“期末”时,我的应用会收到通知并向用户发送一封电子邮件,其中包含“您的帐户已被停用,如果您想再次注册,则可以点击这里重新订阅“。
  4. 这让他们感到困惑,因为他们在思考......这很奇怪,我以为我订阅的时候就像一周前一样(他们确实如此)。所以他们再订阅了。现在他们有两个并发运行订阅到我的网站,我在一两个月内收到一封支持电子邮件(“你本月两次给我发了两次混蛋!”)
  5. 所以我找不到解决这个问题的好方法。我想最好的解决方案是在收到“期末”通知时再做一次API调用,这会通知paypal“嘿,这个人已经重新订阅了吗?”。如果是这样,则无需启动该电子邮件。但是我还没有看到任何方法来进行这个API调用。

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

    其他人解决了这个问题吗?

4 个答案:

答案 0 :(得分:1)

我知道这是一个老线程,但我还没有看到这个问题的实际答案,所以如果有人碰巧像我一样对此感到疑惑,那么这是一个解决方案。

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

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

答案 1 :(得分:0)

据我所知,如果你使用的是网站支付标准/专业按钮,那么就没有Paypal api来检查订阅,我认为你是这样。

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

还有很多第三方可以帮助您管理这个过程,因为paypal的api在这方面有点弱。反复出现的是我已经看过并计划实施的内容,并且还有其他内容。

答案 2 :(得分:0)

引用:Re: When is subscr_eot issued?

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

答案 3 :(得分:0)

How to prevent duplicate PayPal payments?

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