VISA Secure Program - Required Updates

Due to an update to the Visa Secure Program, two new fields are now required in the 3DS authentication request message:

  • Cardholder Name
  • Cardholder Email

Going forward, merchants who fail to provide these two fields will receive the following error response and, consequently, cannot submit a valid 3DS transaction via our API.

Error Response

{
    "id":"50038136-37ec-4635-8638-e46e7e2b90d8",
    "errorCode":100005,
    "generalMessage":"Validation failed.",
    "url":"/threeds/authenticate",
    "timestamp":"2024-05-23T11:37:21.883090165Z",
    "validationErrors":[
        {
            "field":"cardHolderName",
            "message":"must not be null"
        },
        {
            "field":"email",
            "message":"must not be null"
        }
    ]
}

How to Add 3DS Required Fields

To comply with the new requirements, follow these steps:

1. Update CCBill Advanced Widget Version

Update the CCBill Payment Widget to version 1.12.2 by modifying your preload link.

Use the following code snippet for convenience:

<link rel="preload" href="https://js.ccbill.com/v1.12.2/ccbill-advanced-widget.js" as="script"/>
<script type="text/javascript" src="https://js.ccbill.com/v1.12.2/ccbill-advanced-widget.js"></script>

2. Add Required Fields

Depending on your integration, the required fields can be provided in two ways:

1. Using the data-ccbill HTML element attribute.

Example

<form id="payment-form"> 
    <input data-ccbill="email" /> 
    <input data-ccbill="nameOnCard" /> 
    <!— other fields skipped for brevity --> 
</form> 

You must also include hidden or non-hidden HTML input fields for the new data fields in your forms.

2. Utilizing default _ccbillId_FieldName ID attributes or custom ID attributes.

Example

<form id="payment-form">
    <input id="_ccbillId_email" />
    <input id="_ccbillId_nameOnCard" />
    <!— other fields skipped for brevity -->
</form>

If you are using custom ID attributes, the IDs must also be mapped to the corresponding HTML input by passing it through the customIds parameter in the MCN Widget constructor.

Example

<form id="payment-form">
    <input id="customEmailId" />
    <input id="customNameOnCardId" />
    <!— other fields skipped for brevity -->
</form>
<script>
    const customIds = {
        email: "customEmailId",
        nameOnCard: "customNameOnCardId"
    };
    const widget = new ccbill.CCBillAdvancedWidget("application_id", customIds);
    widget
    .authenticateCustomer(
        "oauth_token",
        "client_accnum",
        "client_subacc",
        '#formId',
        'ccbillIframe'
    )
    .then(
        (response) => console.log(`SCA status: ${response.status}`),
        (error) => console.log(`error: ${JSON.stringify(error)}`)
    );
</script>

Ensure you add hidden or visible HTML input fields to your forms for the new data fields.

Additional Field Validation

In addition to the required fields mentioned above, CCBill will start validating Consumer Info, Billing, and Shipping Address fields if they are present in the request.

The following validation constraints will be applied if the fields are present:

FIELDCONSTRAINT
nameOnCard2-45 Characters
email254 Characters (Max). Must comply with RFC 5322 specification.
address150 Characters (Max)
city50 Characters (Max)
country2 Characters (Expecting ISO 3166-1 two-letter country code)
postalCode16 Characters (Max)
state3 characters (Expecting country subdivision code defined in ISO 3166-2)

To ensure a smooth transition and avoid disruptions in your payment processing, we encourage all merchants to review their current setups and make any necessary adjustments to meet these updated requirements.