I am adding subscriptions to a site using Paypal IPN which works very well, I can successfully create a new subscription and verify it. The subscription has a two week free trial. The guide was unfortunately a little vague on subscription statuses.
At the moment, the users account gets subscribed status once subscr_signup or subscr_payment is received and gets removed when either subscr_cancel or subscr_failed is received. I believe this is correct but it's best to make sure.
Also what is subscr_eot? the IPN guide describes it as "subscription’s end-of-term." Does this get triggered after the trial period is over?
Also, one interesting detail is how
subscr_eot
works withsubscr_failed
.It looks like
subscr_eot
comes after the FINALsubscr_failed
. So if in your account you set it to automatically retry failed payments 3 times, then it should go like this:first failed payment => subscr_failed second failed payment => subscr_failed third failed payment => subscr_failed and subscr_eot
so basically in your code you can set
subscr_failed
to trigger an email likeAnd setup
subscr_eot
to actually turn their subscription off and trigger an email likeBasically this is the "nice" way of doing it so customers have a grace period, and their account isn't shut off unexpectedly just because of an expired credit card or something like that.
The thread posted by Chris has been updated recently.
Sometime in 2010, PayPal stopped using subscr_eot when a user cancelled their account. After a number of complaints, they reinstated this, but took 6 months to do so. All this means is that you can once again handle your subscription notifications as described by Peter in the accepted answer.
From a PayPal representative:
Still unsure what happens in the event of multiple failed payment attempts, however. PayPal documentation at the moment is terrible.
It depends on the account if it is new or not whether
subscr_eot
gets sent, which is kinda beyond me?I haven't found the proper way to manage subscriptions yet. Calculating the dates on the server could go wrong very fast if there is a delay in payment.
subscr_eot
is sent when a user's last paid interval has expired.subscr_cancel
is sent as soon as the use cancels the subscription - for example:User signs up on day 1 for a subscription which is billed once a month.
subscr_signup
is sent immediately,subscr_payment
is sent as soon as payment goes through (usually immediately as well).On day 13, the user cancels.
subscr_cancel
is immediately sent, although the user has technically paid through to day 30. Cancelling at this point is up to you.On day 30,
subscr_eot
is sent - the user has cancelled, and this is the day which his last payment paid until.Not much changes with trial subscriptions - if a user cancels before a trial subscription is up,
subscr_cancel
is sent immediately, andsubscr_eot
is sent at the end of the trial.