解析PayPal订阅范围

时间:2012-12-13 07:49:25

标签: paypal-ipn paypal-subscriptions

在PayPal订阅上,似乎我需要做的就是将其视为常规IPN,除了查看txn_type字段。当我看到以下状态代码之一时,我向管理员发送一封电子邮件,以考虑在我用PHP构建的软件的管理面板中手动使该成员到期。

这些状态似乎是以下之一,表示客户已取消,已结束,或者根本不再付款。任何人都可以确认这些是检查的正确状态,还是我包含了一对不合适的状态?

  • subscr_cancel
  • subscr_eot
  • subscr_failed
  • recurring_payment_failed
  • recurring_payment_suspended_due_to_max_failed_pa​​yment
  • recurring_payment_outstanding_payment_failed
  • recurring_payment_profile_cancel
  • recurring_payment_expired

3 个答案:

答案 0 :(得分:2)

我发现这些是我的代码中关于“会员结束”类型反应的观察:

  • subscr_cancel
  • subscr_eot
  • recurring_payment_profile_canceled
  • recurring_payment_expired

所有其他人都只是关于“会员资格结束”状态的“噪音”。例如,对任何支付“失败”类型的IPN做出反应都是错误的,因为最终PayPal可能会在重新尝试后纠正客户的问题,因此取消和到期事件确实是您应该寻找的。

答案 1 :(得分:2)

如果您已完成订阅按钮机制,并且它不是预先批准的定期付款事项之一,那么我认为您只会看到“subscr”前缀的那些。

我个人在我的应用中没有回复“subscr_cancel”。用户取消时会发送IPN。我不想在那时禁用他们的访问权限,所以我等待“subscr_eot”,然后再这样做。

因此,如果他们注册一年,并在第二天取消,他们仍然可以访问年底,这时PayPal将发送“subscr_eot”。他们总是发送两者。

答案 2 :(得分:1)

我知道我在这篇文章中已经很晚了,但这里有一个快速解决方案(php)来解答你的问题:

switch ($_POST['txn_type']) {
    case 'cart':
          //for products without subscription
     break;
    case 'subscr_payment':
        //subscription payment recieved
        break;

    case 'subscr_signup':
        //subscription bought payment pending
        break;

    case 'subscr_eot':
       //subscription end of term
        break;

    case 'subscr_cancel':
        //subscription canceled
        break;
 }