Apple Pay on Paystack: Setup and Domain Verification
To enable Apple Pay on Paystack: (1) Request Apple Pay activation from Paystack support or enable it in your dashboard, (2) download the domain verification file from your Paystack dashboard, (3) host it at https://yourdomain.com/.well-known/apple-developer-merchantid-domain-association, (4) verify the domain in your Paystack dashboard. Once verified, Apple Pay appears automatically on Paystack checkout for customers on Apple devices.
Why Enable Apple Pay
Apple Pay removes the biggest source of checkout friction: typing card numbers. Customers with cards saved in their Apple Wallet can pay with Face ID or Touch ID in seconds. No card number, no expiry, no CVV. Just a biometric confirmation and done.
For merchants, Apple Pay can improve conversion rates on Apple devices. The checkout is faster, the customer does not need to find their card, and the payment experience feels native to their device.
Apple Pay on Paystack works across all supported currencies (NGN, GHS, ZAR, KES, USD) and all Paystack markets. It is available on Safari on iPhone, iPad, and Mac. Chrome and Firefox on these devices may not support Apple Pay due to browser restrictions.
The setup effort is small: one file to host, one verification step. After that, Apple Pay works automatically without any code changes to your checkout.
Step-by-Step Setup
Step 1: Enable Apple Pay on your Paystack account
Check your Paystack dashboard under Settings for Apple Pay options. If Apple Pay is not available, contact Paystack support to request activation. Approval may depend on your account type and business category.
Step 2: Download the domain verification file
In your Paystack dashboard, navigate to the Apple Pay settings section. Download the domain association file. This file is specific to your Paystack account.
Step 3: Host the file on your domain
Place the file at exactly this path on your web server:
https://yourdomain.com/.well-known/apple-developer-merchantid-domain-association
The file must be:
- Served over HTTPS (not HTTP)
- At the exact path shown above (inside a
.well-knowndirectory) - Accessible without authentication or redirects
- Served with a
Content-Typeoftext/plainorapplication/octet-stream
Here is how to set this up on common platforms:
// Express.js: serve the verification file
var express = require('express');
var path = require('path');
var app = express();
// Serve the Apple Pay verification file
app.get('/.well-known/apple-developer-merchantid-domain-association', function(req, res) {
res.sendFile(path.join(__dirname, 'apple-developer-merchantid-domain-association'));
});
For static hosting (Vercel, Netlify, GitHub Pages), place the file in a .well-known directory in your project root. Make sure your hosting platform does not ignore dotfiles or dot-directories.
Step 4: Verify in your Paystack dashboard
Back in your Paystack dashboard, enter your domain and click "Verify." Paystack (through Apple) will check that the file is accessible at the correct path. If verification succeeds, Apple Pay is enabled for that domain.
Hosting on Different Platforms
Vercel (Next.js)
Place the file in the public/.well-known/ directory of your Next.js project. Vercel serves files from public/ at the root of your domain.
public/
.well-known/
apple-developer-merchantid-domain-association
Netlify
Same approach: place the file in the build output directory under .well-known/. If Netlify ignores dotfiles, add a _headers file or configure your build to include them.
Nginx
location /.well-known/apple-developer-merchantid-domain-association {
alias /var/www/yoursite/.well-known/apple-developer-merchantid-domain-association;
default_type text/plain;
}
Apache
Ensure the .well-known directory is not blocked by your .htaccess. Apache sometimes blocks directories starting with a dot.
After deploying, test by visiting https://yourdomain.com/.well-known/apple-developer-merchantid-domain-association in your browser. You should see the file contents (a long string of characters). If you get a 404 or a redirect, fix the hosting configuration before attempting verification.
No Code Changes Needed
Once domain verification is complete, Apple Pay appears on your Paystack checkout automatically. If you use Initialize Transaction (redirect or popup), Apple Pay shows up as a payment option for customers on supported Apple devices. You do not need to change your initialization code, add new parameters, or modify your frontend.
If you are restricting payment channels with the channels parameter, make sure apple_pay is included in the array to allow it:
// Include apple_pay in your channels list
body: JSON.stringify({
email: 'customer@example.com',
amount: 500000,
channels: ['card', 'bank_transfer', 'apple_pay'],
})
If you omit the channels parameter entirely (showing all channels), Apple Pay is included by default for eligible devices.
Testing Apple Pay
Testing Apple Pay requires an Apple device with a card added to Apple Wallet. Paystack test mode may have limited Apple Pay support. Here is how to test:
- Set up Apple Pay on your iPhone or Mac with a real card (test mode uses simulated flows)
- Open your checkout page on Safari on that device
- Initialize a test transaction (using your test secret key)
- Look for the Apple Pay button on the checkout page
- Tap it and authenticate with Face ID or Touch ID
- Verify the test transaction completes in your Paystack dashboard
If the Apple Pay button does not appear:
- Confirm you are using Safari (Apple Pay may not work in other browsers on Apple devices)
- Confirm the domain is verified in your Paystack dashboard
- Confirm Apple Pay is enabled on your Paystack account
- Confirm you have a card set up in Apple Wallet on that device
Handling Apple Pay in Webhooks
Apple Pay transactions generate the same charge.success webhook as other payment channels. The channel field in the webhook payload is "apple_pay".
app.post('/webhooks/paystack', function(req, res) {
res.sendStatus(200);
var event = req.body;
if (event.event === 'charge.success') {
var channel = event.data.channel;
console.log('Payment channel: ' + channel);
// 'apple_pay' for Apple Pay transactions
// Fulfill the order the same way regardless of channel
fulfillOrder(event.data.reference);
}
});
Your fulfillment logic should not differentiate between Apple Pay and card payments. The money is the same. The only reason to track the channel is for analytics: knowing what percentage of your customers use Apple Pay helps you understand your audience.
Verifying Multiple Domains
If you accept payments on multiple domains (a staging domain, a production domain, and a mobile web domain), you need to verify each one separately. The verification file is the same, but you host it on each domain and verify each in your Paystack dashboard.
Common multi-domain scenarios:
www.yoursite.comandyoursite.comare different domains. Verify both if customers might access either.staging.yoursite.comfor testing andyoursite.comfor production. Verify staging if you want to test Apple Pay there.shop.yoursite.comandapp.yoursite.comif you have separate web properties. Verify each one that hosts a checkout.
Key Takeaways
- ✓Apple Pay on Paystack requires domain verification. You host a file at a specific path on your domain so Apple can confirm you own it.
- ✓Once verified, Apple Pay appears automatically on Paystack checkout for customers using Safari on iPhone, iPad, or Mac. No code changes needed.
- ✓Apple Pay is an additive payment channel. Customers without Apple devices simply do not see the option. It does not replace other channels.
- ✓The verification file must be served over HTTPS at the exact path /.well-known/apple-developer-merchantid-domain-association with no redirects.
- ✓Apple Pay transactions appear as regular card payments in your Paystack dashboard and webhooks. The channel field shows "apple_pay".
- ✓You need to verify each domain where you accept payments. If you have multiple domains (staging, production), verify each one separately.
Frequently Asked Questions
- Does Apple Pay work with Paystack test mode?
- Apple Pay in test mode may have limited functionality. You can verify that the Apple Pay button appears on the checkout page, but the actual payment flow uses Apple real infrastructure. Consult Paystack documentation for current test mode capabilities with Apple Pay.
- Do I need an Apple Developer account for Paystack Apple Pay?
- No. Paystack handles the Apple Pay merchant registration. You only need to host the domain verification file and verify your domain in the Paystack dashboard. You do not need your own Apple Developer account.
- Does Apple Pay work on Android devices?
- No. Apple Pay is exclusive to Apple devices (iPhone, iPad, Mac). Android users will not see the Apple Pay option on checkout. They can use card, bank transfer, or other available channels.
- Are Apple Pay transaction fees different from card fees?
- Check with Paystack for the current fee structure. Apple Pay fees are generally in line with card payment fees since Apple Pay is a card-based payment method (the customer uses a card stored in Apple Wallet).
- What happens if the verification file is removed?
- If you remove the verification file from your server, Apple Pay may stop working on that domain after Apple re-validates (which happens periodically). Keep the file permanently hosted at the required path.
Ready to build real-world apps?
Join the McTaba Labs full-stack marathon (4 months full-time · 6 months part-time). Learn M-Pesa, USSD, and WhatsApp engineering while shipping 8 production apps.
Apply to the McTaba Marathon