Skip to main content

One click (1-click) subscription renewal

One click (1-click) subscription renewal

Last updated: 13-Oct-2021
Rate this article:


Avangate supports 1-click manual subscription renewals for returning customers who paid for their previous orders with Credit/Debit cards.

In this scenario, you can facilitate subscription renewals for subscribers who opted out of auto-renewal (recurring billing).

How does this work? 

  1. Identify returning customers. 
  2. Generate the manual renewal link.
  3. Create a tokenized manual subscription renewal link and serve it to the returning customer.
  4. Customers using the link land a hosted shopping cart, chose one of their credit cards they previously used for purchases from your account/store and place the order.


What do shoppers see in the cart?


Please contact Avangate to start using one click (1-click) subscription renewals.


  • Make sure that the subscription is eligible:
    • Status needs to be Active or Past Due
    • Subscription cannot be evergreen
  • Email address must match that from the initial order. If shoppers change the email they need to re-enter the payment details.


Flow comparison

  • Longer purchase funnel
  • Complex flow
  • Unused subscriber and payment on file info
  • High risk of churn
  • Shorter purchase funnel
  • Streamlined flow
  • Uses both customer and payment on file information
  • Lower risk of churn
  • Increase Customer Lifetime Value (CLTV) and recurring revenue


Detailed 1-click subscription renewal flow

Identify returning customers

You particularly need either the Avangate customer reference or the external customer reference you control.

Use customer information



If customers log into your system and you’ve mapped unique identifiers into the Avangate platform you can easily extract their subscription information.


Use subscription information



You can also use subscription information to extract customer references, based on a set of filters. Validate the status of the subscription (needs to be Active or Past Due).

  • Customer email
  • Delivered codes/activation keys
  • Avangate customer reference
  • External customer reference
  • Subscription status
  • Recurring billing status
  • Product code
  • Customer country
  • Purchased date
  • Expiration/Renewal deadline
  • Subscription type


Create the manual renewal link


Retrieve information regarding subscription renewals based on Avangate Subscription References:

  • Information on the automatic renewal (recurring billing) status (enabled or disabled).
  • The link that customers access to renew the subscription though a manual payment.


Attach the payment token to the manual renewal link



Avangate attaches a unique token to links, designed to identify the returning shoppers and support the automatic extraction of payment data and billing information from the Avangate system.



function callRPC($Request, $hostUrl, $Debug = true) {
    $curl = curl_init($hostUrl);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($curl, CURLOPT_SSLVERSION, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Accept: application/json'));
    $RequestString = json_encode($Request);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $RequestString);
    if ($Debug) {
    $ResponseString = curl_exec($curl);
    if ($Debug) {
    if (!empty($ResponseString)) {
        $Response = json_decode($ResponseString);
        if (isset($Response->result)) {
            return $Response->result;
        if (!is_null($Response->error)) {
            var_dump($Request->method, $Response->error);
    } else {
        return null;
$host = '';
$merchantCode = "MERCHANT_CODE";// your account's merchant code available in the 'System settings' area of the cPanel:
$key = "SECRET_KEY";// your account's secret key available in the 'System settings' area of the cPanel:
$string = strlen($merchantCode) . $merchantCode . strlen(gmdate('Y-m-d H:i:s')) . gmdate('Y-m-d H:i:s');
$hash = hash_hmac('md5', $string, $key);
$i = 1; // counter for API calls
// call login
$jsonRpcRequest = new stdClass();
$jsonRpcRequest->jsonrpc = '2.0';
$jsonRpcRequest->method = 'login';
$jsonRpcRequest->params = array($merchantCode, gmdate('Y-m-d H:i:s'), $hash);
$jsonRpcRequest->id = $i++;
$sessionID = callRPC($jsonRpcRequest, $host);
$SubscriptionSearch = new stdClass();
$SubscriptionSearch->CustomerEmail  = null;
$SubscriptionSearch->DeliveredCode = '___TEST___CODE____123';
$SubscriptionSearch->AvangateCustomerReference = '123456789';
$SubscriptionSearch->ExternalCustomerReference = null;
$SubscriptionSearch->Aggregate = false;
$SubscriptionSearch->SubscriptionEnabled = null; //true false null
$SubscriptionSearch->RecurringEnabled = null; // true - autorenewal, false - manual renewal, null = both(default) 
$SubscriptionSearch->ProductCodes = null; //array('Product_Code1', 'Product_Code2');
$SubscriptionSearch->CountryCodes = null;//array ('au')
$SubscriptionSearch->PurchasedAfter = null;
$SubscriptionSearch->PurchasedBefore = null;
$SubscriptionSearch->ExpireAfter = null;
$SubscriptionSearch->ExpireBefore = null;
$SubscriptionSearch->LifetimeSubscription = null;
$SubscriptionSearch->Type = 'regular'; //'trial', 'regular', 'regularfromtrial'
$SubscriptionSearch->TestSubscription = null; // true, false, null = both(default) 
$SubscriptionSearch->Page = 1;
$SubscriptionSearch->Limit = 10;

$jsonRpcRequest = array (
'method' => 'searchSubscriptions',
'params' => array($sessionID, $SubscriptionSearch),
'id' => $i++,
'jsonrpc' => '2.0');

$allsubscriptions = callRPC((Object)$jsonRpcRequest, $host, true);
$subscriptionReference = $allsubscriptions[0]->SubscriptionReference;
$jsonRpcRequest = array (
'method' => 'getRenewalDetails',
'params' => array($sessionID, $subscriptionReference),
'id' => $i++,
'jsonrpc' => '2.0');

$manualrenewallink = callRPC((Object)$jsonRpcRequest, $host, true);

$IdCustomer = $allsubscriptions[0]->AvangateCustomerReference;
$CustomerType = 'AvangateCustomerReference';
$Url = $manualrenewallink->ManualRenewalLink;
$ValidityTime = 999;
$ValidationIp = null;

$jsonRpcRequest = array (
'method' => 'getSingleSignOnInCart',
'params' => array($sessionID, $IdCustomer, $CustomerType, $Url, $ValidityTime, $ValidationIp),
'id' => $i++,
'jsonrpc' => '2.0');

var_dump (callRPC((Object)$jsonRpcRequest, $host, true));

Rate this article:

Need help?

Do you have a question? If you didn’t find the answer you are looking for in our documentation, you can contact our Support teams for more information. If you have a technical issue or question, please contact us. We are happy to help.

Not yet a Verifone customer?

We’ll help you choose the right payment solution for your business, wherever you want to sell, in-person or online. Our team of experts will happily discuss your needs.

Verifone logo