2012-05-18 105 views
7

我有一个基于订阅的会员资格取消的PayPal定期付款,但是我遇到了以下问题:的剩余天

  1. 用户签约在2012年5月1日,每月支付不定。
  2. IPN发送到服务器,激活订阅
  3. 用户取消了5月3日2012年
  4. IPN发送到服务器,订阅被取消,取消的服务器成员。

但是,当用户在2012年5月1日订阅时,如果他要在一个月前取消,他还剩下一些日子。任何方式来解决这个问题? PayPal会针对此类问题发送任何IPN吗?

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

回答

3

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

  • 订阅确认 - 我们将我们服务器上的用户订阅标记为“自动续订”
  • 收到的钱 - 我们将用户的订阅exp iry日期根据商定的期限(每月或每年);我们纪念我们的“手动更新”
  • 钱退还服务器上的用户的订阅 - - 我们把用户的订阅到期日的试用期,只有获取在试用期结束
  • 订阅取消发送此事件根据商定的期限退回。

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

基本上,订阅事件与付款事件是分开的。订阅可以取消,但这并不意味着退款将被退还;那将是一个单独的事件。顺便说一句,付款和订阅事件可以按不同的顺序(例如,付款可以先到达,然后是订阅通知);迎合这一点很重要。

2

当用户订阅时,paypal将创建一个定期付款资料,这意味着用户将不得不每月(每年,每天取决于资料)支付该笔款项,在他订购的那一天(例如,6月1日, ,7月1日)。 当用户取消时,他会取消付款资料,而不是付款本身。所以之后,贝宝将不会要求任何其他付款。如果您希望为用户提供日期,则必须存储有关订阅的信息。

你可以在他订阅的那天和他取消的那天存储一个数据库。从那里你可以知道用户还有多少天。 Paypal会在创建定期付款资料,付款本身以及取消时发送IPN消息。

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

+0

至少我可以有一个理由为什么倒投了? (只是为了从我的错误中吸取教训) – zolipapa

1

一个在IPN消息中的d/V对是next_payment_date随后呈现这样的日期:三点○○分00秒2013年7月6日PDT

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

因此,如果用户取消,他们PROFILE_STATUS在数据库中“已取消”和用户细胞更新为FALSE被更新。

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