Skip to main content

Implement OVO on Adyen Integration v2.0

Zuora

Implement OVO on Adyen Integration v2.0

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

Overview

OVO is a leading digital payment service in Indonesia. Zuora's Adyen Integration v2.0 supports OVO transactions in Indonesian Rupiah (IDR) currency. You can implement a hosted payment page through Payment Pages 2.0 to support the OVO one-time payment flow, which allows you to create an OVO payment method and process on-session payments. Because OVO requires on-session payments, it does not support creating payment methods without processing a payment. Additionally, OVO does not support recurring payments.

One-time payment flow

After the end customers select OVO to pay, the hosted payment page is loaded and automatically submitted. The end customers are redirected to Adyen's challenge window on a new tab where end customers enter the OVO ID and process the payment. Once the payment is completed, the challenge window is closed and the transaction result is displayed on the hosted payment page.

The following table describes the workflows after Zuora receives a successful or failed response from the Adyen synchronous payment API.

Response Workflow

Successful response

  1. Zuora creates the following items:
    • A payment with Payment status = Processed and Gateway State = Submitted
    • An OVO payment method record
  2. A challenge window is displayed. Your customers can follow the instructions in the window to complete the authorization A timer is defined and handled by Adyen. 
  3. At the backend, Zuora listens to the callback result from Adyen and OVO.
    • Based on the returned callback result, the OVO payment results are returned to the callback function of Zuora’s hosted payment page.
    • 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 the OFFER_CLOSED is true, Gateway State is set to FailedToSettle
      • In case of timeout, Zuora displays the error callback result returned from Adyen on the hosted payment page.

Failed response

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

The created OVO payment method can be retrieved through the Zuora UI and API operations.

Supported and unsupported features

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

Supported Unsupported
  • Creation of OVO payment methods through one-time payment flows of hosted payment pages
  • One-time payment processing
  • Referenced refund
  • Real-Time Reconciliation
  • Support idempotency for retrying the following transaction request:
    • Payment
    • Refund
  • Recurring payment processing
  • Standalone payment method validation
  • Payment cancel (void)
  • Non-referenced refund
  • Batch Gateway Reconciliation
  • Delayed Capture
  • Stored Credential Transactions framework and the sharing NTI feature
  • Creation of OVO payment methods through UI or API operation

Overall implementation procedure 

Overall, complete the following steps to implement an OVO payment flow to support one-time 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

You can find detailed instructions in the following sections.

Step 1. Prepare for the integration

Before implementing the OVO payment method on Adyen, ensure that all prerequisites outlined in the following sections are fulfilled.

OVO enablement and configuration

  • Make sure you have contacted Adyen to enable OVO in Adyen.
  • Make sure you have requested support for OVO on Adyen Integration v2.0 through the Specialized Payment Connections service.
  • Activate OVO on your tenant:
    1. Click your username in the upper right and navigate to Settings > Payments > Payment Method.
    2. Click Edit at the bottom of the page.
    3. Select OVO and click Save.

Adyen gateway instance configuration

To configure an Adyen gateway instance for processing OVO transactions, follow the instructions in Set up and configure an Adyen Integration v2.0 gateway instance.

In particular, you can skip the following requirements and settings as they do not apply to OVO transactions.

Prerequisites

The last two prerequisites are not applicable to OVO:

  • The setting for recurring fields in the API response must be enabled…(See this article for a full description)
  • To ensure the network transaction ID (NTI) is returned...(See this article for a full description)

Credentials

  • Merchant Account for Payouts User Account
  • API Key for Payouts User Account
  • Merchant Account for Review & Confirm Payouts User Account
  • API Key for Review & Confirm Payouts User Account

Rules

  • Enable gateway reconciliation
  • Reconciliation Username
  • Reconciliation Password
  • Enable Level 2 Processing
  • Enable Level 3 Processing
  • ShipFrom Postal Code API Name
  • ProductCode Custom Field API Name
  • CommodityCode Custom Field API Name
  • Skip Risk Rules
  • Soft Descriptor
  • Shopper Interaction
  • Recurring Processing Model
  • Auto-capture IP Address
  • Submit Card Payments with RecurringDetailReference
  • Tokenize payment method
Additional Metadata Additional Metadata is not supported by OVO.

Real-Time Reconciliation setup

To process OVO transactions, you must enable Real-Time Reconciliation. Follow the instructions in Enable and configure Real-Time Reconciliation for Adyen Integration v2.0.

Features required for payment flow implementation

Step 2. Create and configure an OVO payment page 

Complete the following steps to create and configure an OVO payment page:

  1. In Zuora UI, navigate to Settings > Payments, and click Setup Payment Page and Payment Link.
  2. On the Payment Pages tab page, configure the tenant-level settings for the hosted payment page.
  3. In the Type dropdown list, select OVO.
  4. Click Create New Hosted Page.
  5. In the Basic Information section, specify the following fields:
    Field Description

    Page Name

    Enter a name for your hosted payment page. This name is used to identify your payment page in Zuora. It is different from the title displayed on the payment page. You can specify the title in the Page Title field in the Page Configuration section.

    Hosted Domain

    Enter the domain address from which your payment page is served. This domain also hosts your callback page. The value must be in the format: https://www.domain.com.

    Zuora validates this field for you. If the validation fails, an error message is displayed on the payment page. Note that the Overlay Hosted Page mode does not support the hosted domain validation.

    If you want your hosted payment pages and callback pages to reside in the subdomain of the hosted domain, enable the tenant-level Allow Subdomain Callback for Hosted Pages setting.

    Callback Path

    Enter the path on which the callback page file resides. Zuora appends this to the Hosted Domain entry to create the full URL to which the callback is sent. Specify a value in the format: /app/callback_file.jsp. The file extension, such as .jsp or .php, is not required. However, the callback path must begin with a forward slash character ( / ).

    The Callback Path is only required for the advanced implementation option, which uses the inline style form with an external submit button. This setting is ignored for the basic setup, which uses the overlay form or the inline form with the submit button inside.

  6. In the Default Payment Gateway field of the Payment Gateway section, click and select an Adyen Integration v2.0 instance. Note that Zuora does not validate this setting. You can override this default gateway in your request by specifying a gateway through the paymentGateway client parameter.
  7. In the Page Configuration section, complete the field configuration.
    Field Description
    Page Title Enter a title for the hosted payment page. Select Display to display the Page Title on this payment page.
    Page Description Enter the description of the payment page. Select Display to display the Page Description on this payment page.
    Submit Button This field is not applicable to OVO. Skip it.
    Client-Side Validation This field is not applicable to OVO. Skip it.
    CSS This field is not applicable to OVO. Skip it.
  8. Click Generate and Save Page.

Subsequently, you can preview the form

Step 3. Request a signature for the Payment Page

Follow the instructions in Request a signature for the Payment Page from Zuora. Because the Client-side HPM Parameter Validation feature is enabled, Zuora will validate the additional fields in the request by comparing them with the values specified in the digital signature.

Here are two request examples for the Generate RSA signature REST API operation.

{
    "uri":"https://sandbox.na.zuora.com/apps/Pu...tedPageLite.do",
    "method":"POST",
    "pageId":"test808145b3bf9d0145b3c6812b0008",
    "paymentGateway":"Adyen",
    "authroizationAmount":"100",
    "currency":"IDR",
    "accountId":"test808145b3bf9d0145b3c6812b0008"
}
{
    "uri":"https://sandbox.na.zuora.com/apps/Pu...tedPageLite.do",
    "method":"POST",
    "pageId":"test808145b3bf9d0145b3c6812b0008",
    "paymentGateway":"Adyen",
    "accountId":"test808145b3bf9d0145b3c6812b0008"
}

Step 4. Set up your client code

Follow the instructions in Integrate Payment Pages 2.0. When rendering the Payment Page form, specify the following required parameters in the Z.render or Z.renderWithErrorHandler function. For other optional parameters, see Client Parameters for Payment Pages 2.0.

Required Parameter Type Description

doPayment

boolean

Default: false

true indicates that the Payment Page will create a payment method as well as process the one-time payment transaction.

If it is false or not specified, the Payment Page will only create a payment method. 

To implement OVO payment flows, doPayment must be true.

storePaymentMethod

 boolean

Default: true

true indicates that the payment method will be stored in Zuora.

false indicates that the payment method will not be stored in Zuora.

field_accountId

string

Zuora customer account ID. This account must be set up with the IDR currency. The payment method will be created for this specified account.

Example: 8a90e5e48f2eade6018f2ed19133003a

authorizationAmount

number

Required for authorization amount processing

The amount of the one-time payment that will be sent to the gateway. 

For more information about this parameter, see Client parameters for Payment Pages 2.0.

field_currency

string

Required for authorization amount processing

The currency of the one-time payment amount. Only IDR is supported by Adyen OVO.   

For more information about this parameter, see Client parameters for Payment Pages 2.0.

documents

array

Required for invoice processing

An array of invoices to be paid in this transaction, containing the following fields:

  • type - The value must be invoice.
  • ref - The value must be the invoice number, such as INV0000001.

Here is an example:

var params = {
    doPayment:"true",
    storePaymentMethod:"false",
    field_accountId:"testc0f87596f2f301759c29443622fa",
    documents:"[{"type":"invoice","ref":"INV00026338"}, {"type":"invoice","ref":"INV00026339"}]"
};

Step 5. Implement the callback response

See Advanced Integration of Payment Pages 2.0 for more information.