This page explains how to add Apple Pay to your existing Web Components integration.
Requirements
Select which endpoint you are using:
Requirement | Description |
---|---|
Integration type | Make sure that you have built a Sessions flow Web Components integration. |
API credential roles | To process live Apple Pay payments make sure that you have the following 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:<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 the Component, 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 the Component , 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:
- /sessions: This is the default with Components v5.0.0 or later.
- /payments: If you implemented an additional use case.
If you run into an error, refer to Handle Apple Pay errors.
Component configuration
Step 1: Create a DOM element
Create a DOM element on your checkout page, placing it where you want the payment method form to be rendered:
<div id="applepay-container"></div>
Step 2: Create an instance of the Component
Select which endpoint you are using:
This is the default with Components 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 the Component if you are using your own Apple Pay certificate:
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(); }); }, });
v6.0.0 or later
Create an instance of the Component, passing:
- Your instance of
AdyenCheckout
. - Optionally, the payment method-specific configuration.
const applePayComponent = new ApplePay(checkout, applePayConfiguration);
Step 3: Mount the Component
Mount the Component only after checking that Apple Pay is available to the shopper:
applePayComponent .isAvailable() .then(() => { applePayComponent.mount("#applepay-container"); }) .catch(e => { //Apple Pay is not available });
Optional configuration
You can do the following:
- Configure the appearance of the Apple Pay button.
- Include additional data such as transaction information, fields for billing and shipping contact information.
- Configure how to render Apple Pay code.
- Add logic for specific events on your payment form.
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. |
v6.0.0 or later
Create an instance of the Component, passing:
- Your instance of
AdyenCheckout
. - The payment method-specific configuration.
const applepayComponent = new ApplePay(checkout, { buttonColor: 'white-outline' }); applepay.isAvailable().then(() => { applepay.mount('#applepay-container'); }).catch(() => { // Apple Pay is not available });
Use the create
method of your AdyenCheckout
instance, in this case checkout
, to create an instance of the Component. Add the configuration object if you created one.
const applepayComponent = checkout.create('applepay', { buttonColor: 'white-outline' }); applepay.isAvailable().then(() => { applepay.mount('#applepay-container'); }).catch(() => { //Apple Pay is not available });
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:
- Apple Pay Wallet Order Tracking Demo
- Apple Pay Tech Talk about implementing Apple Pay with order management
- Example Order Packages
-
Implement
onOrderTracking
:Implement order trackingExpand viewCopy link to code blockCopy codeconst applepayComponent = 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 the Adyen Apple Pay Component. 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(); } } }); -
When
onOrderTracking
is called depends on which server-side flow your integration uses.After the payment is complete, the Component calls
onOrderTracking
. -
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
:
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.
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.
-
Download and unzip the domain association file.
-
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:
/.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.
- Have
-
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.
- You'll be asked for Shop websites: your website URLs, for example