我的网络应用使用PayPal每月订阅。我在付款时收到IPN通知,用户注册/取消等等,这一切似乎都运行良好。
IPN消息中似乎缺少的一件事是关于下一个结算日期的任何形式的指示。 https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNandPDTVariables/#id091EB0901HT
起初我认为,因为它是按月订阅,我可以简单地在上一个日期添加一个月,但PayPal似乎有一种时髦的方式来确定下一个付款日期 - 它不总是30或31天或者一个月。
下一个结算日期可在PayPal内部获得,但似乎不会在任何IPN消息中发送。
有没有人知道从IPN消息中提供的信息中解决这个问题的简单方法?
答案 0 :(得分:3)
我最近也遇到过这个问题。我不确定一个人可以得到一个关于什么时候"月"订阅意味着。例如,如果您在3月31日注册了您的服务,那么下一次付款是在4月30日还是5月1日?您只需选择一个并清楚地与您的用户沟通。它不幸的PayPal并没有给我们这种礼貌。
最后,我决定分别为用户提供32天或367天的服务访问权限,分别为月度和年度订阅。我知道你可能会失去"在这里和那里的一两天,但我认为最好允许一些宽限期访问而不是冒险给用户更少的时间而不是付费。
如果一切顺利,如果您还要监听subscr_eot
和subscr_payment
IPN(请参阅https://stackoverflow.com/a/1195246/1852838),那么激活帐户的时间实际上并不重要。我从下次付款之日起续订上述期间,以便订阅始终与PayPal付款周期同步。当最后一个付款期结束时,PayPal会向您发送eot
IPN,以便您可以在服务器端终止订阅。这意味着多少"恩典"并不重要。你决定给他们。
就提供"支付到" 而言,我只是提供"恩典"约会,因为你实际决定这是多长时间。但是,我建议您也让他们知道他们应该按照下一次付款的下一个最保守估计付款。这将是最后一次付款后30天或月末,如果它落在它之后。
答案 1 :(得分:2)
MONTHLY
类型。而是像这样指定DAY
:
以下将每30天向客户收取费用:
->setfrequency_interval('30')
->setfrequency('DAY')
答案 2 :(得分:0)
大约每30天收集一次每月定期付款。
如果订阅条款为每月$ 25.99 USD,并且订阅者在7月31日(星期四)注册,则该订阅者的费用如下:
答案 3 :(得分:0)
最坏的情况是原始订阅日期是每月 31 日。
为了安全起见,我允许一个月然后 +1 天,但后来发生了。
订阅于 31 日开始
客户在 1 月 31 日订阅并付款。因为那是当月的最后一天,PayPal 在 2 月 28 日再次向他们收费。我的代码然后计算下一个付款日期(+1 天宽限期)= 3 月 29 日。但是,当然不是。现在是 3 月 31 日。
即使不是 100% 准确,我也会跟踪“下一个付款日期”并将其显示在用户的个人资料页面上。 PayPal 没有在 IPN 数据中包含这条重要信息,这对我来说似乎很疯狂。
解决方案 1
一种选择是允许更长的宽限期,或者如果付款日期是任何给定月份的最后一天,则可以例外。这工作正常,但有时会向用户显示稍微错误的信息。
解决方案 2
跟踪订阅的原始日期的日期值。这样你就可以随时参考它。所以在我的例子中,那个月的第几天是 31。我保留那个值,然后每当我需要更新“下一个付款日期”时,我可以在下个月使用该月的那一天。对于较短的月份,如果它是<存储的月份的日期,则只需使用该月份的最后一天。