Payment-method icon

Apple Pay Drop-in integration

Add Apple Pay to an existing Drop-in integration.

This page explains how to add Apple Pay to your existing Web Drop-in integration.

Requirements

Select which endpoint you are using:

Requirement Description
Integration type Make sure that you have built a Sessions flow Web Drop-in integration.
API credential roles To process live Apple Pay payments make sure that you have the following role:
  • API Clientside Encryption Payments role.
Limitations
Setup steps Before you begin, make sure that you have:

Offering Apple Pay on web

When offering the option to pay with Apple Pay on web, there are additional things to consider if you use iframe elements. If you want to show Apple Pay on browser other than Safari, see compatibility to learn which devices and operating systems support this feature.

Apple Pay with iFrames

To show Apple Pay in an iframe element when the shopper is using Safari as their browser:

  • For shoppers on Safari 17 later: add the allow attribute to the iframe to let the iframe communicate correctly with Apple Pay APIs:
    Copy code
    <iframe allow="payment">
    </iframe>

    Safari 17 is available on iOS 17 and later, and macOS 12 and later.

  • For shoppers on Safari 16 or earlier: match the iframe origin and your top-level origin. The protocols, hosts (full domain name), and ports, when specified, must be the same for both pages.

Device compatibility

On v6.10.0 and later versions of Drop-in, you can offer Apple Pay on all supported third-party browsers, platforms, and devices, including Windows and Chromebooks. Shoppers can now initiate Apple Pay payments from any compatible device and complete their payment by scanning a code. See Devices compatible with Apple Pay on Apple Pay documentation.

On earlier versions of Drop-in , the support for Apple Pay on third-party browsers differ per shopper device:

  • MacOS devices: available on Safari.
  • iOS and iPadOS devices: available on all browsers, including web views.
  • Non-Apple devices: not available.

API reference

You do not need to send additional fields for Apple Pay. To see optional fields that you can send for all payment methods, choose the endpoint you integrated:

If you run into an error, refer to Handle Apple Pay errors.

Drop-in configuration

Select which endpoint you are using:

This is the default with Drop-in v5.0.0 or later.

If you are using /sessions together with Adyen's Apple Pay certificate, you do not need to add any additional configuration for Apple Pay.

If using your own Apple Pay certificate, you need to include:

  • onValidateMerchant: Required for displaying the Apple Pay payment sheet. For more information, see Apple Pay documentation.

The following example shows how to configure Drop-in if you are using your own Apple Pay certificate:

Apple Pay configuration
Expand view
Copy link to code block
Copy code
Copy code
const applepayComponent = new ApplePay(checkout, {
onValidateMerchant: (resolve, reject, validationURL) => {
// Your server uses the validation URL to request a session from the Apple Pay server.
validateMerchant(validationURL)
.then(response => {
// Complete merchant validation with resolve(MERCHANTSESSION) after receiving an opaque merchant session object, MerchantSession
resolve(response);
})
.catch(error => {
// Complete merchant validation with reject() if any error occurs
reject();
});
},
});

Include the applePayConfiguration object when creating a configuration object:

AdyenCheckout configuration
Expand view
Copy link to code block
Copy code
Copy code
const configuration = {
// ... other required configuration
paymentMethodsConfiguration: {
applepay: applePayConfiguration
}
};

Pass the Drop-in configuration object when creating your instance of AdyenCheckout:

Copy code
const checkout = await AdyenCheckout(configuration);

Optional configuration

This optional configuration parameter is only accepted on the dropin instance.

Instant payment button configuration

Use the instantPaymentTypes object to display the Apple Pay payment button at the top of the list of available payment methods. The sample below shows how to do this:

Optional Drop-in instance configuration
Expand view
Copy link to code block
Copy code
Copy code
const dropin = new Dropin(checkout, {
instantPaymentTypes: ['applepay']
}).mount('#dropin-container');

Optional Apple Pay configuration

You can do the following:

Button configuration

Property Description
buttonType The type of button you want to show on your payments form. Possible values:
- plain: Apple Pay
- buy: Buy with Apple Pay
- donate: Donate with Apple Pay
- check-out: Check out with Apple Pay
- book: Book with Apple Pay
- subscribe: Subscribe with Apple Pay

The following types are supported from Web Components v4.1.0:
- add-money: Add money with Apple Pay
- contribute: Contribute with Apple Pay
- order: Order with Apple Pay
- reload: Reload with Apple Pay
- rent: Rent with Apple Pay
- support: Support with Apple Pay
- tip:Tip with Apple Pay
- top-up: Top Up with Apple Pay
buttonColor Specify the color of the button you want displayed on the payment form. Possible values:
- black: Black button
- white: White button with no outline
- white-with-line: White button with black outline
buttonLocale Specify the locale to set the language for the Apple Pay button. For possible values, see Apple Pay documentation.

Payment request data

Payment request data Configuration object Description
Transaction information version Check the Apple Pay on the Web documentation for version features and compatibility details.
totalPriceLabel String. Description of the line item.
lineItems A set of line items that explain recurring payments, additional charges, and discounts. Refer to Apple Pay documentation for sample values.
merchantCapabilities Payment capabilities supported by the merchant. Default value is [supports3DS]. Refer to Apple Pay documentation for other options.
shippingMethods List of available methods for shipping physical goods. Refer to Apple Pay documentation for sample values.
shippingType Optional value that indicates how purchased items are to be shipped. Refer to Apple Pay documentation for available options.
supportedCountries Specify the ISO 3166 country codes if you only support payments from cards issued in specific countries.
supportedNetworks Specify the card networks that you support. This is configured automatically based on your Adyen merchant account settings, but you can override the configuration here.
Requested billing and shipping contact information requiredBillingContactFields Billing information fields that you require from the shopper to process the transaction. Refer to Apple Pay documentation for sample values.
requiredShippingContactFields Shipping information fields that you require from the shopper to fulfill the order. Refer to Apple Pay documentation for sample values.
Known contact information billingContact Set an up-to-date billing contact information for the shopper.
shippingContact Set an up-to-date shipping contact information for the shopper.
Custom data applicationData A Base64-encoded string used to contain your application-specific data. For example, a shopping cart identifier or an order number that you will need to identify this transaction.
Recurring payments recurringPaymentRequest Required for recurring payments. Include to specify that the payment is a recurring payment.

Code rendering configuration

Property Description
renderApplePayCodeAs Specify whether the Apple Pay code is rendered as a modal, or pop-up window within the page when using Apple Pay in a browser other than Safari. Possible values:
- modal: This is the default when the Apple Pay Component is not embedded in an iframe.
- window: This is the default when the Apple Pay Component is embedded in an iframe.

Events

The following event handlers are supported for Apple Pay. Select the event handler names to see the related Apple Pay documentation.

Event Description
onClick(resolve, reject) Called when the shopper clicks the Apple Pay button. Call resolve() to continue or reject() to stop the payment flow.
onValidateMerchant(resolve, reject, validationURL) Required if you use your own Apple Pay certificate. Called when the payment sheet is displayed. See Apple Pay documentation for more information.
onAuthorized(data, actions) Called after the shopper authorizes the payment with Apple Pay. This contains the raw event from Apple Pay, and the raw event from Apple Pay pre-formatted by our Web SDK. Call actions.resolve() to continue or actions.reject() to stop the payment flow. See Apple Pay documentation for more information.
onPaymentMethodSelected(resolve, reject, event) Called when the shopper selects a new payment method. Call resolve() or reject(), passing the ApplePayPaymentMethodUpdate object. See Apple Pay documentation for more information.
onShippingContactSelected(resolve, reject, event) Called when the shopper selects a shipping contact. Call resolve() or reject(), passing the ApplePayPaymentMethodUpdate object. See Apple Pay documentation for more information.
onShippingMethodSelected(resolve, reject, event) Called when the shopper selects a shipping method. Call resolve() or reject(), passing the ApplePayPaymentMethodUpdate object. See Apple Pay documentation for more information.
onApplePayCodeClose Called when the Apple Pay code modal or window closes.

Optional Apple Pay Wallet Order Tracking

Supported in v6.0.0 or later.

You can use Apple Pay Wallet Order Tracking to give your shopper order tracking through Apple Pay. For more information, refer to the following resources from Apple:

  1. Implement onOrderTracking:

    Implement order tracking
    Expand view
    Copy link to code block
    Copy code
    Copy code
    const applepay = new ApplePay(checkout, {
    onOrderTrackingRequest: async (resolve, reject) => {
    try {
    // Request the order details from your server.
    const order = await server.getOrder();
    // Pass the order details to Drop-in.
    const orderDetails = {
    orderTypeIdentifier: order.orderTypeIdentifier,
    orderIdentifier: order.orderIdentifier,
    webServiceURL: order.webServiceURL,
    authenticationToken: order.authenticationToken
    };
    resolve(orderDetails);
    } catch (error) {
    // If you cannot get the order, call the reject function.
    reject();
    }
    }
    });
  2. When onOrderTracking is called depends on which server-side flow your integration uses.

    After the payment is complete, Drop-in calls onOrderTracking.

  3. From your server, get the order details and pass it as orderDetails to your client side.
    If an error occurs, the Apple Pay payment overlay is closed, and the payment is successfully completed without creating an order in the shopper's Apple Wallet app.

Optional Apple Pay capabilities check

Supported in v6.10.0 or later.

You can use the applePayCapabilities method to check whether the device supports Apple Pay and if the shopper has an active card in their wallet for web payments. You can then configure when to offer Apple Pay depending on the available payment methods in your shopper's wallet. This is only recommended if you display Apple Pay on the product page.

To implement applePayCapabilities:

Copy code
applepay.applePayCapabilities().then(capabilities => {
// Check whether the person has an active payment method in their wallet.
switch (capabilities.paymentCredentialStatus) {
case "paymentCredentialsAvailable":
// Display an Apple Pay button and offer Apple Pay as the primary payment option.
case "paymentCredentialStatusUnknown":
// Display an Apple Pay button and offer Apple Pay as a payment option.
case "paymentCredentialsUnavailable":
// Optionally, display an Apple Pay button.
case "applePayUnsupported":
// Do not show an Apple Pay button or offer Apple Pay.
}
});

Recurring payments

Apple Pay supports tokenization for recurring transactions on v5.39.0 and later.

We strongly recommend that you ask explicit permission from the shopper if you intend to make future recurring payments. Being transparent about the payment schedule and the charged amount reduces the risk of chargebacks.

To enable recurring payments, you must include recurringPaymentRequest when configuring Apple Pay.

Example recurringPaymentRequest configuration
Expand view
Copy link to code block
Copy code
Copy code
const applepayComponent = new ApplePay(checkout {
recurringPaymentRequest: {
paymentDescription: "Merchant tokens Adyen test",
managementURL: "https://www.adyen.com/",
tokenNotificationUrl: "https://www.adyen.com/tokenNotificationUrl",
regularBilling: {
label: "Subscription",
amount: "20.00",
type: "final",
paymentTiming: "recurring",
recurringPaymentStartDate: new Date("2023-12-01T00:00:00"),
recurringPaymentIntervalUnit: "month",
recurringPaymentIntervalCount: 4,
recurringPaymentEndDate: new Date("2024-03-01T00:00:00"),
},
trialBilling: {
label: "Trial billing",
amount: "10.00",
type: "final",
paymentTiming: "recurring",
recurringPaymentStartDate: new Date("2023-11-01T00:00:00"),
recurringPaymentIntervalUnit: "month",
recurringPaymentIntervalCount: 1,
recurringPaymentEndDate: new Date("2023-12-01T00:00:00"),
}
},
});

To make recurring payments, refer to Tokenization to:

  • Create a token through the initial payment
  • Use the token in subsequent payments.
  • Manage tokens.

Test and go live

Use Apple's test card numbers to test your integration.

For a full list of test cards and instructions how to add these to your test device, see Sandbox testing on Apple's Developer website.

Check the status of an Apple Pay test payment in your Customer Area > Transactions >  Payments.

Going live

To process live Apple Pay payments, your API credential needs to have the API Clientside Encryption Payments role. You can check this in your live Customer Area or ask your Admin user to verify.

  1. Download and unzip the domain association file.

  2. Host the domain association file on each domain you want to use, including subdomains. To host the file, use the exact file name apple-developer-merchantid-domain-association under the following path:

    Copy code
    /.well-known/apple-developer-merchantid-domain-association

    The file must:

    • Have Content-Type: text/plain in the header.
    • Be externally accessible.
    • Not be password protected.
    • Not be behind a proxy or redirect.

    See an example of a working domain association file.

  3. Add Apple Pay in your live Customer Area

    • You'll be asked for Shop websites: your website URLs, for example https://www.mystore.com. If you add more than one, separate them with a comma.

See also