Hi Kyle,
I've set my grace period to 4 days. This issue is because their payments fail at PayPal twice.
So the order of events is:
- New user signs up January 1st & pays with recurring PayPal payments for the first instance.
- On Feb 1, PayPal charges the recurring subscription and IPN notifies my site.
- My site receives the notification and extends the expiration date another month for that subscription.
- On March 1 PayPal tries to charge the subscription but the payment fails (for whatever reason: card expiration, lack of funds, etc.)
- Since I set a 4 day grace period, nothing happens on my site just yet.
- On March 4 (3 days after the first payment failed) PayPal tries to charge the subscription again, but fails again. PayPal keeps the subscription alive and will try one more time in 5 days to collect the recurring payment.
- On March 5, my site sees that the subscription has past it's expiration date plus the grace period, so it cancels the subscription as expired.
- On March 6 the user tries to log into my site and sees that their membership has expired so they renew the subscription.
- When the user is in PayPal, they see that either the card expired or they need to add funds, so they update their payments and the new subscription is activated, and he's charged on March 6 on the new subscription.
- The user is unaware that the original subscription with PayPal is still active and latent.
- On March 9 PayPal tries to collect again on the old subscription and this time there are funds (or credit card updated) and the payment is charged successfully.
- My site receives the IPN and adds a month to the subscription (which was already active) making the expiration May 6 (2 months ahead).
- From then on double payments happen, every 1st and 6th of the month they will be charged until someone looks.
Of course subscribers SHOULD be aware of their subscriptions and payments, but may times they are not. I've posted detailed instructions on the site, but they are not read. A possible solution would be to extend the grace period to 10 days but that would allow for people to take unfair advantage of the grace period.
By having the API cancel the subscription at PayPal upon expiration, this would be adverted. I understand there are several different places where this happens. It seems to me that the script that runs the automatic expiration does not consider cancelling the subscription in PayPal as it logical to assume that if the Payment has not been made, there's no active subscription in PayPal, and this is true almost every time. It's rare, but the example above happens to me at least once a month and it's getting more common.
If this could be fixed it would save me a few headaches!
Thank you,
Tomás