检测Paypal订阅取消

11

我已经编写了一个简单的PayPal订阅系统,用户可以输入信息、点击按钮并开始订阅。但是,我不知道如何确定用户何时取消订阅?我看到过 $txn_type subscr_cancel,但我不知道如何使用它,因为PayPal不会再次调用我的处理程序。

谢谢!


我希望得到一个不需要 IPN 的答案。即使我使用 IPN,我也想通过调用 PayPal API 终端点并使用订阅 ID 查看状态来在订阅期结束时双重检查用户的订阅状态。这种方式可行吗? - Michael
2个回答

26

如果您正在使用IPN,当取消订阅时,PayPal将返回$_POST['txn_type'] = subscr_cancel以及subscr_date = 订阅日期、subscr_id = 订阅ID等信息,现在您可以处理返回的订阅ID并取消该订阅。 类似地,当订阅结束时,您会收到$_POST['txn_type'] = subscr_eot。 一旦您在PayPal设置中设置了IPN网址,它将始终调用您的IPN处理程序。 使用switch case来处理不同的请求,如下所示,

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;
 }

1
今晚正是我所需要的!不知道为什么文档里没有明确说明这一点。 - Volomike
刚刚看到这个。这太有帮助了(我已经苦恼了一段时间)。谢谢! - MillerMedia
1
我认为PayPal表达得非常清楚明了。[https://www.paypal.com/us/cgi-bin/webscr?cmd=p/acc/ipn-subscriptions-outside] - Sisir

8

当用户实际取消订阅时,将发送带有“subscr_cancel”类型的IPN。这不应该用于取消订阅,因为这可以在订阅期间的任何时间发生。

应使用带有“subscr_eot”类型的IPN来取消订阅。当用户的订阅期已过期时,会发送此消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接