Recurring payments
Boost conversion and manage subscriptions using tokenization.
Recurring payments is a MultiSafepay solution that securely stores payment details to enable quick, easy repeat payments.
How it works
MultiSafepay encrypts customers' sensitive payment details during an initial payment for secure storage, and provides you with a non-sensitive identifier for the details known as a "token". Customers can save multiple tokens.
MultiSafepay is responsible for PCI DSS compliant storage of payment details.
Tokens are stored at account level rather than website level. If you operate multiple websites from a single MultiSafepay account, you can also offer cross-domain recurring payments, i.e. tokenize a customer's details on Website A and offer one-click payments on Website B.
Supported recurring models
We offer three recurring payment models, each designed to handle specific payment scenarios. Defining the model in your request classifies the transaction based on the initiator. This determines which validations apply, whether 3DS exemptions are granted, and which parameters are required.
- One-click payments: The customer selects stored details for faster checkout.
- Subscriptions: You use the token to collect payments at specific intervals, e.g. weekly, monthly.
- Unscheduled payments: You use the token for event-triggered payments, e.g. mobile top-up when no credit left on phone.
Initial payment
- The customer gives you consent to store their payment details and verifies their identity with 3D Secure.
- MultiSafepay encrypts the payment details during processing and stores them securely on our servers. We return to you a non-sensitive token that references the encrypted payment details.
- You can use the token to process recurring payments without needing to handle or store sensitive payment details.
Zero Authorization
Optionally, you can set the amount for the initial payment 0. No funds are transferred but a token is created (if the payment details are valid).
See Zero Authorization.
Subsequent payments: Customer-initiated
- You display the customer's available tokens at checkout, e.g.
MASTERCARD **43. - The customer selects a token and confirms the payment. They don't need to re-enter any payment details.
Customer-initiated subsequent payments support the one-click payments model.
- You include the token in the request to MultiSafepay.
- MultiSafepay decrypts the payment details and processes the payment.
Subsequent payments: Merchant-initiated
- The customer must give consent (once only).
- You include the token in the request to MultiSafepay.
- MultiSafepay decrypts the payment details and processes the payment.
There are two common use cases for merchant-initiated subsequent payments:
- Subscriptions
- Unscheduled payments
Activation
Email a request to activate recurring payments to [email protected]
Specify in your request which tokenization model(s) you want to use:
- One-click payments
- Subscriptions
- Unscheduled payments
We send you an agreement to sign, including terms and conditions for data usage.
Supported payment methods
For both initial and subsequent payments:
- Cards: American Express, Maestro, Mastercard, and Visa
- Direct debit – First you need to provide us with some information.
See Direct debit – Activation. - Bancontact - Bancontact WIP
For initial payments then subsequent payments via Direct debit:
- iDEAL
Integration
Payment component
Our payment components support recurring payments.
To enable them, see payment components - Recurring payments.
Ready-made integrations
You must have both card payments and recurring payments enabled for your MultiSafepay account.
Our ready-made integrations only support the cardOnFile model.
Supported integrations
We support recurring payments in our plugins for:
API
See API reference:
Our API and PHP SDK support all three recurring models.
Additional parameters
| Parameter | Type | Description |
|---|---|---|
type | string | The payment flow for the checkout process. Values:: direct, redirect. |
gateway | string | The unique gateway_id to redirect the customer to the specific payment method. Make a get gateway request. Values: AMEX, VISA, MASTERCARD, DIRDEB. |
recurring_id | string | A randomly generated recurring ID for the customer. |
reference | string | The customer's reference number for the token. |
recurring_model | string | The type of recurring model to use. Values: unscheduled, cardOnFile, subscription. |
User guide
To process recurring payments, first create an initial transaction to tokenize the customer's payment details. You can then use the resulting token to authorize all subsequent payments.
Authentication
To process recurring payments, you need to use the relevant website API key, for both initial and subsequent payments.
Initial payment
- Make an initial payment request.
- Add the required parameters, including:
customer.browser. To retrieve the customer's device and browser information, integrate the following customer.browser object.customer.reference.recurring.model. The value will be stored along with the token and will be applied to subsequent payments. We support the following values:-
subscription -
cardOnFile(one-click payments) -
unscheduledTo learn more, go to models.
-
- If the payment flow is of
type: direct, remember to include thegateway_infoobject with the required card details.
- Complete the payment. You can retrieve the customer's token creating a list tokens request.
Example of an initial payment
curl --request POST \
--url 'https://testapi.multisafepay.com/v1/json/orders?api_key={your_site_api_key}' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"type": "direct",
"gateway": "CREDITCARD",
"order_id": "initial_payment",
"currency": "EUR",
"amount": 1000,
"description": "Example description",
"recurring": {
"model": "subscription"
},
"customer": {
"browser": {
"ip_address": "46.6.116.167",
"javascript_enabled": 1,
"java_enabled": 1,
"cookies_enabled": 1,
"language": "en",
"accept_header": "*",
"screen_color_depth": "24",
"screen_height": "780",
"screen_width": "1024",
"time_zone": "-180",
"user_agent": "Mozilla/5.0 (Windows NT 6.3; WOW64)",
"platform": "Linux amd64"
},
"locale": "nl_NL",
"first_name": "John",
"last_name": "Doe",
"address1": "Neherkade",
"reference": "my_customer_001"
},
"gateway_info": {
"card_number": "4111111111111111",
"card_holder_name": "Test cardholder",
"card_expiry_date": "3012",
"card_cvc": "123"
}
}'Subsequent payment
- Make a list tokens to retrieve a list of the customer's tokens.
- Make a subsequent payment request.
- Add the required parameters, including:
recurring.id. Enter the identifier that contains the customer's token.customer.reference.- If
recurring.model: cardOnFile,customer.browseris required.
- Complete the payment.
Example of a subsequent payment for customer initiated payments
curl --request POST \
--url 'https://testapi.multisafepay.com/v1/json/orders?api_key={your_site_api_key}' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"type": "direct",
"order_id": "subsequent_payment",
"currency": "EUR",
"amount": 1000,
"description": "product description",
"recurring_id": {your_customer_token},
"payment_options": {
"notification_url": "https://testtool.dev.multisafepay.com/client/json-test/notification?type=notification",
"redirect_url": "https://testtool.dev.multisafepay.com/client/json-test/notification?type=redirect",
"cancel_url": "https://testtool.dev.multisafepay.com/client/json-test/notification?type=cancel"
},
"customer": {
"browser": {
"ip_address": "46.6.116.167",
"javascript_enabled": 1,
"java_enabled": 1,
"cookies_enabled": 1,
"language": "en",
"accept_header": "*",
"screen_color_depth": "24",
"screen_height": "780",
"screen_width": "1024",
"time_zone": "-180",
"user_agent": "Mozilla/5.0 (Windows NT 6.3; WOW64)",
"platform": "Linux amd64"
},
"locale": "nl_NL",
"reference": "shopper-456"
}
}'Example of a subsequent payment for merchant initiated payments
curl --request POST \
--url 'https://testapi.multisafepay.com/v1/json/orders?api_key={your_site_api_key}' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"type": "direct",
"order_id": "subsequent_payment",
"currency": "EUR",
"amount": 1000,
"description": "product description",
"recurring_id": {your_customer_token},
"payment_options": {
"notification_url": "https://testtool.dev.multisafepay.com/client/json-test/notification?type=notification",
"redirect_url": "https://testtool.dev.multisafepay.com/client/json-test/notification?type=redirect",
"cancel_url": "https://testtool.dev.multisafepay.com/client/json-test/notification?type=cancel"
},
"customer": {
"browser": {
"ip_address": "46.6.116.167",
"javascript_enabled": 1,
"java_enabled": 1,
"cookies_enabled": 1,
"language": "en",
"accept_header": "*",
"screen_color_depth": "24",
"screen_height": "780",
"screen_width": "1024",
"time_zone": "-180",
"user_agent": "Mozilla/5.0 (Windows NT 6.3; WOW64)",
"platform": "Linux amd64"
},
"locale": "nl_NL",
"reference": "shopper-456"
}
}'Support
Email [email protected]
Updated about 17 hours ago