Welcome to Zuora Product Documentation

Explore our rich library of product information

Implement UPI on Adyen Integration v2.0

Learn how to implement the UPI payment method on Adyen Integration v2.0, including setup, configuration, and enabling features like zero-amount validation and Real-Time Reconciliation.

Note:

Support for the UPI payment method on Adyen can be requested through the Specialized Payment Connections service at an additional cost.

Overview

Unified Payments Interface (UPI) is an Indian instant payment system developed by the National Payments Corporation of India (NPCI). It enables users to link multiple bank accounts to a single mobile application, facilitating inter-bank transactions through a user-friendly process.

Zuora's Adyen Integration v2.0 supports UPI transactions in INR. To support UPI one-time and recurring payment flows, you can implement a hosted payment page through Payment Pages 2.0.

One-time payment flow

Response

Workflow

Successful response

  1. Zuora creates the following items:
    • A payment with Payment status = Processed and Gateway State = Submitted
    • A UPI payment method record
  2. A timer dialog is displayed, instructing your customers to open the UPI application on their mobile devices. In the UPI application, your customers complete the authorization within the time that you have configured when implementing your hosted payment page.
  3. At the backend, Zuora listens to Adyen's webhook events.
    • Based on the returned webhook event, the UPI payment results are returned to the callback function of the hosted payment page. You can implement your customized logic to handle success or failure cases.
    • Zuora also updates Gateway State according to the returned webhook:
      • If AUTHORIZATION is true, Gateway State is set to Settled.
      • If AUTHORIZATION is false or OFFER_CLOSED is true, Gateway State is set to FailedToSettle.
    • If Zuora does not receive Adyen's webhook event before time is up, Zuora returns an error callback with the Payment_Status_Unknown error code. You are recommended to proactively query the transaction status to check whether it is Settled or FailedToSettle. You can use the Retrieve a payment API operation and pass in the payment ID or payment method ID returned in the callback to query the status.

Failed response

Zuora throws an error on the hosted payment page with the error response message received from Adyen.

The created UPI payment method can be retrieved through the Zuora UI and API operations. In the Electronic Payment Methods section of the customer account page, you can also retrieve the token information described in the following table. Token ID and Second Token ID will be used in subsequent recurring payments.

Zuora UI field

Value

Token ID

shopperReference

Second Token ID

ShopperDetailReference

Third Token ID

mandate ID

After a payment is processed, the Reference ID field is populated with a UUID and mapped to pspReference. If you want Reference ID to be populated with the payment number mapped to the merchantReference field in Adyen, submit a ticket at Zuora Global Support.

As regulation requires, a pre-debit notification per invoice must be sent to the UPI users before collecting the recurring payments. To support this requirement, Zuora immediately sends the pre-debit notification request to Adyen once the invoice is posted, if all of the following conditions are met.

Conditions for triggering pre-debit notification requests

  • The invoice has an outstanding balance.
  • The type of the payment method is UPI.
  • The type of the gateway instance is Adyen Integration v2.0
  • The transaction currency is INR.
  • One of the following conditions regarding pre-debit notification reference is true:
    • No pre-debit notification has been successfully triggered for this invoice, and no pre-debit notification reference is stored in Zuora.
    • A pre-debit notification reference exists but has already been used for a processed payment. For example, an invoice is posted, and a pre-debit notification is sent. The recurring payment is processed successfully. Later, a refund is issued for this payment, reopening the invoice balance. Zuora's scheduled pre-debit notification retry picks up the invoice and sends another pre-debit notification.

Successful requests

Zuora sends the notifyShopper field in the request to Adyen for each invoice. Adyen synchronously returns the notificationReference field for successful requests, which will be used for the upcoming recurring payments. Zuora stores notificationReference and associates it with the invoice, processing the payment through the scheduled payment run.

Your customers can make a recurring UPI payment in INR through Adyen under the allowed maximum amount configured for the mandate when implementing your hosted payment page. If the recurring payment amount is greater than the maximum allowed amount, additional authentication is required and you need to handle it outside Zuora.

Retries of failed requests

If the pre-debit notification request fails, no notificationReference is received from Adyen. Zuora retries the request using the following logic if the invoice meets the conditions in Conditions for triggering pre-debit notification requests:

  • If the gateway's notification API supports idempotency, Zuora retries sending the request immediately.
  • Zuora also retries the request at 09:30 AM IST (08:00 PM PST) and 11:30 AM IST (10:00 PM PST). By default, Zuora retries the request up to 23 days after the initial pre-debit notification attempt.

Manual initiation of the request

If you want to manually trigger the pre-debit notification, instead of waiting for the auto-retries, you can use the Trigger a pre-debit notification API operation. The invoice must also meet the conditions in Conditions for triggering pre-debit notification requests.

Mandate cancellation

If the mandate is canceled on your end, you can close the UPI payment method in Zuora by using the Delete a payment method REST API operation. If the mandate is canceled through the UPI application, Adyen notifies Zuora through Adyen's DISABLE_RECURRING webhook event, prompting Zuora to close the payment method.

Supported and unsupported features

The following table lists the supported and unsupported operations and features for UPI on Adyen Integration v2.0.

Supported

Unsupported

  • One-time payment processing
  • Payment cancel (void)
  • Recurring payment processing
  • Non-referenced refund
  • Standalone payment method validation
  • Batch Gateway Reconciliation
  • Payment method creation without making a one-time payment
  • Delayed Capture
  • Referenced refund
  • Stored Credential Transactions framework and the sharing NTI feature
  • Real-Time Reconciliation
  • Creation of UPI payment method through UI or API operation
Support idempotency for retrying the following transaction requests:
  • Recurring payment
  • Refund
  • Asynchronous Payment Statuses

Overall implementation procedure

Overall, complete the following steps to implement a UPI payment flow to support one-time or recurring payments:

  1. Prepare for the integration.
  2. Set up a Payment Page 2.0.
  3. Request a signature from Zuora for the payment page.
  4. Set up your client code to integrate the payment page to your web page.
  5. Implement the callback response.