使用 PayPal 订阅 IPN 字段管理用户帐户

Posted

技术标签:

【中文标题】使用 PayPal 订阅 IPN 字段管理用户帐户【英文标题】:Using PayPal subscription IPN fields to manage user accounts 【发布时间】:2015-10-02 10:43:05 【问题描述】:

我正在使用 PayPal 收取订阅费用以访问网站服务。

我正在使用 PayPal 的 IPN 来管理付款和用户帐户。

当订阅首次实例化时,我将向 PayPal 发送一个自定义随机密钥,该密钥对每个用户都是唯一的,因此每个 IPN 都会发回相同的密钥。这意味着我可以非常积极地将我的用户表与我的 PayPal 通知绑定在一起。

因此,我现在可以从我的数据库中生成 user_ids 和通知详细信息的列表。

所以现在我需要找出用于计算每个用户当前付款状态的最佳逻辑,以及如何处理他们的帐户 - 是否继续允许访问、暂停甚至删除他们的用户帐户。这个决定将归结为他们的付款是否仍然通过。

PayPal 的 IPN 上提供了一系列有趣的不同数据 - 大多数看起来与用户帐户管理无关,但有几列看起来非常有用。具体...

    字段outstanding_balance 似乎正好包含那个 - 一个价值 2dp 的钱仍然欠。到目前为止,在我的测试中,这个数字只有 0.00

    字段txn_type 向我显示了从不同代码中选择的任何代码:subscr_signup(当用户最初设置订阅时)、subscr_payment(当付款似乎成功时)、subscr_cancel(这似乎是否出现客户或供应商取消订阅)和 subscr_eot(期末 - 在取消订阅后不久出现此消息)。

我的冲动是在表格中搜索每个用户帐户的最新txn_type="subscr_payment" 条目,并检查最后一个通知到达的日期。如果日期戳过,例如 28 天前,则可以暂停帐户……如果超过 56 天,则可以删除帐户。

这是个好主意吗?还是我可以采用更好的逻辑?

【问题讨论】:

【参考方案1】:

我已经做到了。很简单:

    在收到第一笔付款之前不要授予访问权限。您可以按任一顺序获得初始注册和付款。 如果他们取消订阅或订阅过期,PayPal 会通知您。当您获得其中任何一个时,从生效日期起拒绝访问。 如果帐户最近的付款状态为“反向”,请暂停访问,直到您获得“取消反向”或以其他方式解决问题。 不要计算天数。贝宝计算天数。重复说自己是一个分歧,你所能得到的只是,猜猜谁是对的?贝宝。猜猜谁没有错?客户。您不想因为 PayPal 落后或对 28 天有不同的想法而惩罚客户。您已将收款和续订的责任交给 PayPal:让他们来做吧。

    谨防将政策纳入其中。它应该只是一种机制,并且应该可以手动覆盖。例如,这个用户现在是否可以访问这个产品的实际评估不能是对他们的支付历史的计算。只需简单查找另一个表,您的 IPN 代码可以修改,但人类也可以。例如:有争议。你输了。无论如何,出于业务问题,您可能希望让客户在宽限期内保持活力。或者,您可能在极端情况下想要立即解雇客户,例如违反使用规定。

    您可以忽略余额字段。唯一重要的是txn_type

【讨论】:

我的情况略有不同,但我认为逻辑会非常相似。就我而言,用户设置了一个帐户并在免费试用期内使用它。他们可以在不泄露任何付款细节的情况下做到这一点……为了用户的心意和善意。然后,在他们的免费试用结束时,他们被邀请订阅。当收到付款成功的通知时,他们的帐户会退出“免费试用”模式并进入“实时”模式。 检查最新txn_type 状态的一个潜在障碍是在订阅开始时有两个IPN 进入-subscr_signupsubscr_payment。这就是为什么我考虑专门搜索最近的txn_type=subscr_payment 并查看它是多久之前的原因 你能详细说明一下'reverse'和'cancel reverse'状态吗?这些是在什么情况下出现的,我如何使用我的测试帐户创建这些状态,以及通过的确切文本是什么? 有关注册和首次付款的信息见上文。当您同时拥有它们时,创建并启用该帐户。从那里开始,它只是对进一步交易做出反应的问题。有争议时会出现“反转”,如果解决了对您有利的问题,则取消 - 反转。不知道你是如何在沙盒中合成它们的。 txn_types 都记录在 IPN 指南中。重新试用,PayPal 已经支持该功能,并且符合上述方案。不记得细节了,我要到星期五才离开,但我相信你的首期付款为零, 我一直在查看 IPN 指南 - 我只是想找到已经通过它的人的意见:) 所以,假设我的订阅期是 28 天,你认为它安全吗说如果subscr_payment 在过去 28 天内出现过,那么一切正常。如果subscr_payment 在过去 28 天内没有出现,那么说明付款有问题,应该暂停帐户吗?

以上是关于使用 PayPal 订阅 IPN 字段管理用户帐户的主要内容,如果未能解决你的问题,请参考以下文章

带有 CodeIgniter 的 PayPal IPN

如何在没有 PayPal 帐户的情况下取消 PayPal 订阅?

使用 Paypal IPN 订阅

如果用户从贝宝帐户界面暂停订阅,如何在客户端站点获取订阅的 IPN 通知

缺少 PAYPAL IPN 自定义字段

带有 IPN 的 PayPal 用户输入表单