One common complaint about the Authorize.Net Automated Recurring Billing (ARB) system is that there is no way to handle subscriptions that are declined when processing a future scheduled payment. As it turns out there is a way to handle this failures programmatically and automate your response to them.
Authorize.Net has a little known, and poorly documented feature called Silent Post URL. This is a URL that you specify where the results of all transactions are posted. This is in addition to the response given via their API.
The results of all transactions, including those processed using the Advanced Integration Method, are posted to this URL. This means you will be responsible for determining which are real-time transactions and which are using the ARB API. How you can do this is quite simple. When an ARB transaction’s results are posted two extra fields are included:
x_subscription_id – This is the ARB subscription ID of the transaction processed. You should probably already have this stored in a database somewhere.
x_subscription_paynum – This is the number of the occurrence of the subscription that failed. If this was the fifth recurring transaction for that subscription the value of this field would be ’5′.
You can look for the presence of either of these two fields to indicate the transaction is an ARB transaction and act accordingly.
Here is some sample PHP code for handling a response posted to the Silent Post URL:
// Flag if this is an ARB transaction. Set to false by default.
$arb = false;
// Store the posted values in an associative array
$fields = array();
foreach ($_REQUEST as $name => $value)
// Create our associative array
$fields[$name] = $value;
// If we see a special field flag this as an ARB transaction
if ($name == 'x_subscription_id')
$arb = true;
// If it is an ARB transaction, do something with it
if ($arb == true && $fields['x_response_code'] != 1)
// Suspend the user's account
// Email the user and ask them to update their credit card information
// Email you so you are aware of the failure
To set the Silent Post URL simply login into your Authorize.Net control panel and click on your Settings links. It will be one of the options on that page. Simply add the URL you want them to post the responses to and submit it. It will take effect immediately.
So, if you have read our article Integrate the Authorize.Net Recurring Billing API with PHP and wanted to find a way to handle recurring billing failures in an automated fashion, then this solution should be music to your ears.