What Does ApplePaySession.canMakePayments Check?
This article explains the exact functionality of the
ApplePaySession.canMakePayments method when executed by a
script within the Safari web browser. It covers the specific hardware,
software, and user restriction criteria this method evaluates to
determine if a device is capable of processing Apple Pay transactions,
while also clarifying what the method intentionally does not check, such
as the presence of an active payment card in the user's Wallet.
The Core Verification Criteria
When a script running in Safari calls
ApplePaySession.canMakePayments(), it returns a boolean
value (true or false). To return
true, the method instantly verifies the following
conditions on the user's device:
- Hardware Capability: It checks if the user is on an iPhone, iPad, or Mac that possesses the required hardware (such as the Secure Element) to process Apple Pay transactions, or is a Mac capable of handing off the payment request to a nearby iPhone or Apple Watch via Bluetooth.
- Operating System Support: It verifies that the version of iOS, iPadOS, or macOS running on the device supports Apple Pay on the web.
- Parental and Device Restrictions: It checks the system settings to ensure that Apple Pay has not been disabled via Screen Time (parental controls) or restricted by a Mobile Device Management (MDM) profile often used on corporate or educational devices.
Prerequisite Environment Checks
Before ApplePaySession.canMakePayments can even be
called, the browser environment implicitly enforces two conditions
because the ApplePaySession object will not exist
otherwise:
- Browser Compatibility: The script must be running
in Safari, or an approved iOS web view like
SFSafariViewController. - Secure Context: The webpage must be served over HTTPS. Apple Pay APIs are completely unavailable on insecure HTTP connections.
What the Method Does Not Check
A common misconception is that canMakePayments verifies
whether a user is ready to pay immediately. In reality, this method
does not check if the user has a credit or debit card
provisioned in their Apple Wallet.
If a user is on a brand-new iPhone using Safari over HTTPS with no
restrictions enabled, ApplePaySession.canMakePayments()
will return true, even if their Apple Wallet is completely
empty.
Apple designed the method this way so merchants can still display the Apple Pay button to capable devices. If a user without an active card taps the button, Safari will prompt them to add a card to their Wallet and then immediately complete the purchase.
Summary of Best Usage
Developers should use ApplePaySession.canMakePayments
when they want to display the Apple Pay button on product pages or in
the checkout flow to the widest possible audience of Apple users.
Because it executes locally and does not query Apple's servers to check
for active cards, it is extremely fast and protects user privacy.