Implement iDEAL on Stripe v2
Support for the iDEAL payment method on Stripe v2 can be requested through the Specialized Payment Connections service at an additional cost.
Overview
iDEAL is the leading online bank transfer payment method in the Netherlands. iDEAL works with all the major Dutch banks. Zuora's Stripe v2 gateway integration supports iDEAL. You can implement a hosted payment page through Payment Pages 2.0 to support iDEAL one-time and recurring payment flows. The created iDEAL payment methods are automatically tokenized. The creation of iDEAL payment methods through Zuora UI or API operations is not supported.
One-time payment flow
When end customers pay with iDEAL, a list of banks is presented and end customers are redirected to the selected bank's website or application, where end customers confirm the payment with a second factor of authentication. The payment is processed instantly and the end customer is notified of the outcome.
The created iDEAL payment method can be retrieved through the Zuora UI and API operations if you choose to store it in Zuora. You can also retrieve the following token information in the Electronic Payment Methods section of the customer account page. Token ID
and Second Token ID
will be used in subsequent recurring payments.
Zuora UI field | Value |
---|---|
Token ID | The Stripe Customer Id, such as cus_xxxxxx |
Second Token ID | The Stripe Payment Method Id, such as pm_xxxxxx |
Third Token ID | The mandate ID |
The Reference ID of the payment is populated with the Stripe charge ID, such as py_xxxxxxx
.
Recurring payments flow
Recurring payments are processed with the stored Token ID
and Second Token ID
described in the preceding table through SEPA Direct Debit. To support processing recurring payments, the following requirements must be met:
- Real-Time Reconciliation for Stripe v2 must be enabled.
- In your implementation of the one-time payment flow, select to store the payment method when processing the one-time payment.
For implementation instructions, see later sections.
Supported and unsupported features
The following table lists the supported and unsupported operations and features for iDEAL on Stripe v2:
Supported | Unsupported |
---|---|
|
|
Overall implementation procedure
Overall, complete the following steps to implement iDEAL on Stripe v2:
- Prepare for the integration.
- Set up a Payment Page 2.0.
- Request a signature from Zuora for the payment page.
- Set up your client code to integrate the payment page to your web page.
- Implement the callback response.
You can find detailed instructions in the following sections.
Step 1. Prepare for the integration
Before implementing the iDEAL payment method on Stripe, ensure that all prerequisites outlined in the following sections are fulfilled.
iDEAL enablement and configuration
- Make sure you have requested support for iDEAL on Stripe v2 through the Specialized Payment Connections service.
- Complete the following steps to activate the iDEAL payment method type on your tenant:
- Click your username in the upper right and navigate to Settings > Payments > Payment Method.
- Click Edit at the bottom of the page.
- Select iDEAL and click Save.
Stripe gateway instance configuration
Overall, follow the instructions in Set up and configure a Stripe payment gateway instance to configure a Stripe v2 gateway instance for processing iDEAL transactions.
In particular, enter the payment description information in the Payment Description field. This information is required by the iDEAL payment flow.
You can skip the following settings as they are not applicable to iDEAL transactions.
Section | Setting skipped and description |
---|---|
Rules |
|
Additional Metadata | Additional Metadata is not supported by iDEAL. |
Real-Time Reconciliation setup
To process iDEAL recurring payments, you must enable Real-Time Reconciliation. Follow the instructions in Enable and configure Real-Time Reconciliation for Stripe v2.
Features required for payment flow implementation
- To support processing authorization amounts, the following features must be turned on:
- Validate Client-Side HPM Parameters
Follow the instructions in Client-side Payment Page parameter to enable it. - Either Credit Balance or Invoice Settlement
- Validate Client-Side HPM Parameters
- To support processing invoices, the following requirements must be met:
- Validate Client-Side HPM Parameters must be enabled.
- The invoices must be posted before the invoices are paid through the one-time payment.
- To understand the implementation procedure of Payment Pages 2.0 in Zuora, review Payment Pages 2.0 implementation overview.
Step 2. Create and configure an iDEAL payment page
Complete the following steps to create and configure an iDEAL payment page:
- In Zuora UI, navigate to Settings > Payments, and click Setup Payment Page and Payment Link.
- On the Payment Pages tab page, configure the tenant-level settings for the hosted payment page.
- In the Type dropdown list, select iDEAL.
- Click Create New Hosted Page.
- 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.
- In the Security Information area, configure the page-level security settings. For detailed information about each option, see Security Measures for Payment Pages 2.0.
- In the Default Payment Gateway field of the Payment Gateway section, click and select a Stripe v2 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.
- 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 label is applied only if the button is on the Payment Page form. See Client Parameters for Payment Pages 2.0 for information about the submitEnabled
parameter that controls the placement of the submit button.Client-Side Validation
Select Enable client-side validation to check the required fields for values:
- If the client-side validation is enabled, you can specify a custom error message for missing required fields in the Error Message field.
- In the Error Message field, use
#fieldName
to include the missing field name in the error message. For example, "Please enter a valid #fieldName to continue."
Confirmation Dialog Select Enable Confirmation Dialog to add a step to display a confirmation dialog in the Payment Page workflow. When this step is enabled, your customers get a chance to confirm the information they entered before submitting the payment method.
After you select Enable Confirmation Dialog, the template editor appears. Customize the Confirmation Dialog by typing in the desired information in the template editor, such as the page heading, your merchant name, etc. If you want to customize the CSS style of the Confirmation Dialog, add the customized CSS to the CSS field.
The default behavior of the Cancel button is closing the confirmation dialog and allowing the end user to edit the account information again. If you want to customize the logic, you can use the onCancelMandatePage event handler in your client code.
Do not select the Retrieve Mandate PDF field to avoid errors. This setting only works for bank transfer type of hosted payment pages on GoCardless.
CSS
Enter the custom CSS code for your page. You can review the CSS id and class names by using View Source or Inspect Element in Firefox or Chrome on the preview page of this Payment Pages form. For example, you can customize the style and format of the field label and error message, as well as the error message texts. However, implementing customized JavaScript is not allowed for security reasons.
Design Payment Pages CSS provides a CSS pack that you can download and use to design the look and formatting of your Payment Pages 2.0 form.
Ensure that you enter the valid CSS codes in this field. An error will occur if you include HTML tags or other invalid characters.
- 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":"Stripe", "authroizationAmount":"100", "currency":"EUR", "accountId":"test808145b3bf9d0145b3c6812b0008" }
{ "uri":"https://sandbox.na.zuora.com/apps/Pu...tedPageLite.do", "method":"POST", "pageId":"test808145b3bf9d0145b3c6812b0008", "paymentGateway":"Stripe", "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
If it is To implement one-time flows, |
storePaymentMethod |
boolean |
Default: true
|
field_accountId |
string |
Example: Zuora customer account ID. The payment method will be created for this specified account. |
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. 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:
|
Here is an example for authorization amount processing:
var params = { doPayment:"true", storePaymentMethod:"true", paymentDescription:"First Payment", field_accountId:"testc0f87596f2f301759c29443622fa", authorizationAmount:"99", field_currency:"EUR" };
Here is an example for invoice processing:
var params = { doPayment:"true", storePaymentMethod:"true", paymentDescription:"First Payment", field_accountId:"testc0f87596f2f301759c29443622fa", documents:"[{\"type\": \"invoice\", \"ref\": \"INV0000001\"}, {\"type\": \"invoice\", \"ref\": \"INV0000002\"}]" };
Step 5. Implement the callback response
See Advanced Integration of Payment Pages 2.0 for more information.