I've read several posts here on the behavior of ARB when a scheduled payment is DECLINED.
From what I gather - for an EXISTING ARB subscription WHEN PAYMENT IS DECLINED:
1. If it is the FIRST scheduled payment or payment info has been updated recenlty, the subscription STATUS gets set to SUSPENDED.
Updating payment info sets subscription STATUS back to ACTIVE and the NEXT DAY at 2AM there is another attempt to process, no matter when the next subscription payment should run.
2. If there has been 1 or more past payments on the subscription, the subscription STATUS *STAYS* ACTIVE.
Updating payment info does nothing to STATUS and the next payment attempt is not run until the next scheduled date (could be 30 days away for a monthly subscription).
How does one programatically deal with these two scenerios which are BOTH DECLINES but ARB is not consistent with STATUS or NEXT CHARGE DATE?
Here's the workflow:
1. From SILENT POST we know an ARB payment has failed (DECLINED).
2. Next, check subscription status via API could be ACTIVE or SUSPENDED depending on 1 & 2 above! NO LOGIC HERE!
3. If SUSPENDED, update payment, ARB runs again *NEXT DAY* a 2AM. At the time of update you won't know if card is valid, so possibility of failure. Could do AIM AUTH_ONLY to prevent this, but that's an extra step. Can't do AIM catch up here because ARB would double charge the user, since SUSPENDED updates automatically run the NEXT DAY at 2AM!
4. If ACTIVE, update payment, ARB won't run again until next scheduled DATE. Have to process AIM Catch up payment to get account current.
Seems like the only accurate way to deal with a SILENT POST ARB decline is to cancel the subscription, do an AIM catch up and create new ARB subscription. Relying on API subscription STATUS is not accurate.
STATUS SHOULD BE *SUSPENDED* IN EVERY CASE when payment is declined! And also, the next payment charge date should be consistent and not vary if STATUS is SUSPENDED or ACTIVE!
It's way too much headache to try and programmatically account for all the scenerios above. You would have to store another DB field for LAST_PAYMENT_STATUS (declined, accepted) alongside ARB_STATUS (active, suspended, etc). This is a waste. What is ARB STATUS useful for if not to know if the subscription is active or not. And when a payment FAILS there is no good reason for a subscription to stay ACTIVE!
Please post the solutions that you've found for these issues.
Since this is a fundamental change in how some things work, we don't want to break anyone's existing workflow by forcing something on everyone. So, it's definitely opt in.
More specific details about how it works should be available from that link in the Merchant Interface.
It seems subscriptions are not only set to suspended when declined, but ALSO if the payment is held for review by FPS.
And then if approved, how can I set the subscription status back to active without it charging again the following day?