Building payment workflows

Learn how to create SCA-compliant workflows using Drop-in payments or Elements.

Using Drop-in payments or Elements, you can create Strong Customer Authentication (SCA) compliant workflows for both purchase transactions and account management.

Whichever payment solution you're using, all SCA requirements are managed by Digital River. Two-factor authentication is handled by our authenticate source method. And our card acquirers use the 3-D Secure protocol to communicate with issuing banks. This protocol operates "behind-the-scenes" and requires no developer interaction.

Key settings and methods

The following chart lists some of the key settings and methods you should use when building purchase and account management flows. It's meant to be read from left-to-right and top-to-bottom. For example:

Common Drop-in payments steps

For any workflow that uses Drop-in payments, whether it's intended to handle purchases or account management, you first need to perform the following steps:

Elements prerequisites

If you're using Elements to build purchase workflows, make sure you complete the necessary migration to payment sessions. We also assume you are familiar with creating and styling elements as well as the basics of capturing payment details.

Purchase flows

For almost all one-off, subscription, and mail-order/telephone-order (MOTO) transactions, Digital River supports SCA-compliant workflows that use either Drop-in payments or Elements.‌

One-off

‌One-off workflows allow customers to enter, save, and retrieve their payment information while making one-time purchases.

Customers enter their payment information

‌In this one-off flow, customers supply their payment information, but don't save it to their account.

SCA required?Drop-in payments supported?Elements supported?

Yes

Yes

Yes

Prerequisites: Perform the common Drop-in payments steps.

Step one: Build a checkout with all tax, shipping, duty and fee amounts in a final state and a chargeType that is customer_initiated.

Step two: Retrieve the checkout's payment session identifier, and use it to set sessionId in the configuration object. In options, set flow to checkout and usage to convenience.

let configuration = {
    sessionId: "d3941a36-6821-4d93-be23-6190226ae5f7",
    options: {
        flow: "checkout",
        usage: "convenience"
    }
    ...
}

Step three: Pass the configuration object to the create Drop-in method.

let dropin = digitalriver.createDropin(configuration);

Step four: On your checkout page, Drop-in payments renders in the designated container.

Customers enter their payment information and click the configurable pay now button.

If customers complete any SCA that may be required, onSuccess returns a source.

...
onSuccess: function (data) { doSometingWithTheSource(data) },
...

Step five: Attach the Source to the Checkout.

Step six: Convert the Checkout to an Order.

Customers save their payment information

In this one-off flow, customers enter payment information and save it to their account.

SCA required?Drop-in payments supported?Elements supported?

Yes

Yes

Yes

Prerequisites: Perform the common Drop-in payments steps.

Step one: Build a checkout with a registered customer and all tax, shipping, duty and fee amounts in a final state. The chargeType should be customer_initiated.

Step two: Retrieve the checkout's payment session identifier and use it to set sessionId in the Drop-in payments' configuration object. You should also use options to set flow to checkout, usage to convenience, and showSavePaymentAgreement to true.

let configuration = {
    sessionId: "d3941a36-6821-4d93-be23-6190226ae5f7",
    options: {
        "flow": "checkout",
        "showSavePaymentAgreement": true,
        "usage": "convenience"
    },
    ...
}

Step three: Pass the configuration object to the create Drop-in method.

let dropin = digitalriver.createDropIn(configuration);

Step four: On your checkout page, Drop-in payments renders in the designated container.

Customers enter their credit card information, actively accept the save payment agreement and click the configurable pay now button.

If customers complete any SCA that may be required, onSuccess returns a source that is readyForStorage.

...
onSuccess: function (data) { doSometingWithTheSource(data) },
...

Step five: Attach the Source to the Customer.

Step six: Attach the Source to the Checkout.

Step seven: Convert the Checkout to an Order.

Customers retrieve their payment information

In this one-off purchase flow, customers select a payment method that they previously saved to their account. The key step is to call the authenticate source method.

SCA required?Drop-in payments supported?Elements supported?

Yes

No

Yes

Drop-in payments does not currently support retrieving saved payment methods. In order to handle this flow, use Elements.

Subscription

You can create SCA-compliant workflows that allow customers to either save or retrieve a recurring payment method during subscription acquisitions. You can also set up workflows for merchant-initiated autorenewals.

SCA is required for subscription acquisitions but not merchant-initiated auto-renewals.

Customers enter and save their payment information during a subscription acquisition

In this flow, customers save payment information to their account and use that payment source to acquire an auto-renewing subscription.

SCA required?Drop-in payments supported?Elements supported?

Yes

Yes

Yes

Prerequisites: Perform the common drop-in steps.

Step one: Build a checkout with a registered customer and all tax, shipping, duty and fee amounts in a final state. Set chargeType to customer_initiated and autoRenewal to true.

Step two: Retrieve the checkout's payment session identifier, and use it to set sessionId in the configuration object. In options, set flow to checkout, usage to subscription, and showTermsOfSaleDisclosure to true.

let configuration = {
    sessionId: "d3941a36-6821-4d93-be23-6190226ae5f7",
    options: {
        "flow": "checkout",
        "showTermsOfSaleDisclosure": true,
        "usage": "subscription"
    },    
    ...
}

Step three: Pass the configuration object to the create Drop-in method.

let dropin = digitalriver.createDropIn(configuration);

Step four: On your checkout page, Drop-in payments renders in the designated container.

Customers must enter their payment information, actively accept the terms and click the configurable pay now button.

If customers complete any SCA that may be required, onSuccess returns a source that is readyForStorage.

...
onSuccess: function (data) { doSometingWithTheSource(data) },
...

Step five: Attach the Source to the Customer.

Step six: Attach the Source to the Checkout.

Step seven: Convert the Checkout to an Order.

Customers retrieve saved payment during a subscription acquisition

In this flow, customers select a credit card they previously saved to their account and use it to acquire an auto-renewing subscription.

‌The key step is to call the authenticate source method.

SCA required?Drop-in payments supported?Elements supported?

Yes

No

Yes

Drop-in payments does not currently support retrieving stored payment methods. In order to handle this flow, use Elements.

Merchant-initiated auto renewals

In this workflow, a merchant initiates the auto-renewal of a subscription. Although this type of workflow doesn't require SCA, you should ensure you're correctly handling auto-renewing subscriptions.

SCA required?Drop-in payments supported?Elements supported?

No

N/A

N/A

Mail order/telephone order

SCA is not required for transactions where customers provide their payment details by regular mail, fax, or telephone. But both Drop-in payments and Elements support building workflows for mail order and telephone order (MOTO) transactions.

SCA required?Drop-in payments supported?Elements supported?

No

Yes

Yes

Prerequisites: Perform the common Drop-in payments steps.

Step one: Build a checkout with a chargeType of moto and all tax, shipping, duty and fee amounts in a final state. This configures Drop-in payments to display only payment methods that are supported in MOTO transactions.

Step two: Retrieve the checkout's payment session identifier, and use it to set sessionId in the Drop-in payments' configuration object. In options, set flow to checkout and usage to convenience.

let configuration = {
    sessionId: "d3941a36-6821-4d93-be23-6190226ae5f7",
    options: {
        flow: "checkout",
        usage: "convenience"
    }
    ...
}

Step three: Pass the configuration object to the create Drop-in method.

let dropin = digitalriver.createDropin(configuration);

Step four: On your checkout page, Drop-in payments renders in the designated container.

The merchant's representative enters the customer's credit card information and clicks the configurable pay now button. If the payment is authorized, then onSuccess returns a unique source in a chargeable state.

...
onSuccess: function (data) { doSometingWithTheSource(data) },
...

Step five: Attach the Source to the Checkout.

Step six: Convert the Checkout to an Order.

Account management flows

You can create flows that allow customers to manage recurring payment methods through their account portal.

In these account management flows, you only need to adhere to SCA regulations when saving a customer's credit card for future use. While storing a card, attempt to identify the intended use of the source. This increases the probability that future transactions will be approved.

You're not required to do SCA when updating a credit card's expiration date or billing address.

Saving a credit card for future use

In this flow, customers use their account portal to save payment information for use in future transactions.

SCA required?Drop-in payments supported?Elements supported?

Yes

Yes

Yes

Prerequisites: Perform the common drop-in steps.

Step one: On the page where customers manage their payment methods, use the configuration object's options to set flow to managePaymentMethods and specify a value for usage that identifies the likely future use of the payment.

If customers are replacing an active subscription's recurring billing instrument, make sure you set usage to subscription and showTermsofSaleDisclosure to true. This prompts Drop-in payments to display a recurring billing agreement and forces customers to accept it.

Because this is a managePaymentMethods flow, and there's no payment session to reference, you shouldn't provide a sessionId. As a result, you'll need to pass the billing information you collect from customers in billingAddress.\

Step three: Pass the configuration object to the create Drop-in method.

let dropin = digitalriver.createDropIn(configuration);

Step four: On your checkout page, Drop-in payments renders in the designated container.

Customers enter their payment information, select the save payment agreement option and click the configurable add payment method button.

If customers complete any SCA that may be required, onSuccess returns a source that is readyForStorage.

...
onSuccess: function (data) { doSometingWithTheSource(data) },
...

Step five: Attach the Source to the Customer.

Updating a credit card's expiration date or billing address

In this flow, customers use their account portal to update the expiration date or billing address on a saved credit card.

SCA required?Drop-in payments supported?Elements supported?

No

No

Yes

Drop-in payments does not support interacting directly with saved payment methods‌

Last updated