Rebils ran hourly according to schedule. Current rebill step-down setup looks like this:
NSF NON Prepaid
```
+-------+------------+-----------+-------------------+
| retry | delay_days | step_down | step_down_percent |
+-------+------------+-----------+-------------------+
| 1 | 3 | no | 0.00 |
| 2 | 3 | yes | 20.00 |
| 3 | 3 | yes | 50.00 |
| 4 | 3 | yes | 50.00 |
| 5 | 3 | yes | 50.00 |
+-------+------------+-----------+-------------------+
```
Step down Prices (we use percent for non defined currencies)
```
+-------+----------+-------+
| retry | currency | price |
+-------+----------+-------+
| 2 | AUD | 24.99 |
| 2 | CAD | 24.99 |
| 2 | EUR | 24.99 |
| 2 | GBP | 24.99 |
| 2 | USD | 24.99 |
| 3 | AUD | 14.99 |
| 3 | CAD | 14.99 |
| 3 | EUR | 14.99 |
| 3 | GBP | 14.99 |
| 3 | USD | 14.99 |
| 4 | AUD | 9.99 |
| 4 | CAD | 9.99 |
| 4 | EUR | 9.99 |
| 4 | GBP | 9.99 |
| 4 | USD | 9.99 |
| 5 | AUD | 4.99 |
| 5 | CAD | 4.99 |
| 5 | EUR | 4.99 |
| 5 | GBP | 4.99 |
| 5 | USD | 4.99 |
+-------+----------+-------+
```
NSF PREPAID
```
+-------+------------+-----------+-------------------+
| retry | delay_days | step_down | step_down_percent |
+-------+------------+-----------+-------------------+
| 1 | 1 | yes | 20.00 |
| 2 | 1 | yes | 50.00 |
| 3 | 1 | yes | 50.00 |
| 4 | 1 | yes | 50.00 |
| 5 | 1 | yes | 50.00 |
+-------+------------+-----------+-------------------+
```
Step down Prices (we use percent for non defined currencies)
```
+-------+----------+-------+
| retry | currency | price |
+-------+----------+-------+
| 1 | AUD | 24.99 |
| 1 | CAD | 24.99 |
| 1 | EUR | 24.99 |
| 1 | GBP | 24.99 |
| 1 | USD | 24.99 |
| 2 | AUD | 14.99 |
| 2 | CAD | 14.99 |
| 2 | EUR | 14.99 |
| 2 | GBP | 14.99 |
| 2 | USD | 14.99 |
| 3 | AUD | 9.99 |
| 3 | CAD | 9.99 |
| 3 | EUR | 9.99 |
| 3 | GBP | 9.99 |
| 3 | USD | 9.99 |
| 4 | AUD | 4.99 |
| 4 | CAD | 4.99 |
| 4 | EUR | 4.99 |
| 4 | GBP | 4.99 |
| 4 | USD | 4.99 |
| 5 | AUD | 1.99 |
| 5 | CAD | 1.99 |
| 5 | EUR | 1.99 |
| 5 | GBP | 1.99 |
| 5 | USD | 1.99 |
+-------+----------+-------+
```
Default Decline Plan
```
+-------+------------+-----------+-------------------+
| retry | delay_days | step_down | step_down_percent |
+-------+------------+-----------+-------------------+
| 1 | 3 | no | 0.00 |
| 2 | 3 | no | 0.00 |
| 3 | 3 | no | 0.00 |
| 4 | 3 | no | 0.00 |
| 5 | 3 | yes | 50.00 |
+-------+------------+-----------+-------------------+
```
Step down Prices (we use percent for non defined currencies)
```
+-------+----------+-------+
| retry | currency | price |
+-------+----------+-------+
| 5 | AUD | 14.99 |
| 5 | CAD | 14.99 |
| 5 | EUR | 14.99 |
| 5 | GBP | 14.99 |
| 5 | USD | 14.99 |
+-------+----------+-------+
```
Default 3 month Decline Plan
```
+-------+------------+-----------+-------------------+
| retry | delay_days | step_down | step_down_percent |
+-------+------------+-----------+-------------------+
| 1 | 4 | no | 0.00 |
| 2 | 4 | no | 0.00 |
| 3 | 4 | no | 0.00 |
| 4 | 4 | no | 0.00 |
+-------+------------+-----------+-------------------+
```
Notes:
1) Once we successfully step down, we always stay in that “retry” and price according to setup.
2) In case of expired cc and failed guess attempt, we immediately suspend subs (no further rebils)
3) In case of decline with restricted or invalid, codes we immediately suspend subs and mark cc as fraud
4) For defined step down pricing, if defined step down price is actually bigger than “regular” price, we go down trough defined price retries until we get the one which is lower. For example for NSF PREPAID, if regular rebill price is 2.99USD, we immediately go to retry 4 (so skipping 1,2,3 because defined step down price there is bigger). If each price is bigger, then we suspend subs.
5) For step downs in percent, if converted currency price is lower than 1USD, we immediately suspend subs.
6) We’re scheduling rebills in user’s time zone so it’s never between 1am till 4am
7) We also have list of banned bins, in that case we’re canceling sub (not immediate stop, but no further rebils)
8) We literally use PHP’s built in Datetime class and calculate date by adding rebill unit (i.e. 1 month). In most situations it literally adds month, like for monthly rebills, it will calculate next rebill date for YYYY-MM-DD as YYYY-(MM+1)-DD. So: 2014-01-01 => 2014-02-01; 2014-05-07 => 2014-06-07; 2014-02-07 => 2014-03-07 etc. The only inconsistency is when next month doesn’t have that day as current month which obviously usually happen on 31st because in most situations it can’t just add month as for example for 2014-03-31 because there’s no 2014-04-31. In such situations PHP seems to go with 31 days so it schedule next rebill to 2014-05-01. And similarly happened with our with Jan 29th scheduled to March 1st. etc.
UPDATE (2016-05-18): Starting from today every Prepaid CC Decline will be assigned NSF PREPAID PLAN (per T5597).
UPDATE (2016-05-23): Added PCODE_CC_INVALID (PV2 code 601) to the list of rebil suspend codes
UPDATE (2016-05-24): Number of attempts will always match to the one defined in plan, even when some step down retries are skipped (T5624)
UPDATE (2016-05-24): Rebill Plans changed (T5623)