When integrating the Wallet Extension, after clicking my app icon from the "From Apps on Your iPhone" list, I encountered the message: "Cannot Add Card. 'XXX' is not responding. Wait a few minutes and try again. If the problem continues, contact the card issuer's customer service" instead of the configured login page appearing as expected.
What could be causing this issue, and how should I resolve it?
Apple Pay
RSS for tagDiscuss how to integrate Apple Pay into your app for secure and convenient payments.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I am facing an issue while integrating Apple Pay in my React.js application. The onvalidatemerchant callback works perfectly, and the merchant validation is successfully completed. However, after the Apple Pay session is validated, the payment sheet appears briefly and then closes immediately without triggering the onpaymentauthorized event.
I have provided the relevant code snippets and API implementation below. I would greatly appreciate your insights on resolving this issue.
import React, { useEffect, useRef, useState } from "react";
// Relevant imports
const ApplePayButton = ({ paymentType, handlePayment, cartSummary }) => {
const [applePaySession, setApplePaySession] = useState(null);
const cartSummaryRef = useRef(cartSummary);
useEffect(() => {
cartSummaryRef.current = cartSummary;
}, [cartSummary]);
const setupApplePaySession = async () => {
if (!window.ApplePaySession || !ApplePaySession.canMakePayments()) {
console.log("Apple Pay is not supported on this device/browser.");
return;
}
const paymentRequest = {
countryCode: "US",
currencyCode: "USD",
merchantCapabilities: ["supports3DS"],
supportedNetworks: ["visa", "masterCard", "amex"],
total: {
label: "Total",
amount: `${cartSummaryRef.current?.total?.amount || "10.00"}`,
},
requiredBillingContactFields: ["postalAddress", "email", "phone", "name"],
};
const session = new ApplePaySession(6, paymentRequest);
setApplePaySession(session);
session.onvalidatemerchant = async (event) => {
try {
const response = await createAndValidateApplePaySession({
validation_url: event.validationURL,
provider: "APPLE_PAY",
});
if (response?.status && response?.data?.applePaySession) {
const merchantSession = JSON.parse(
response.data.applePaySession.session_details
);
session.completeMerchantValidation(merchantSession);
} else {
console.error("Merchant validation failed: Invalid response.");
}
} catch (error) {
console.error(`Merchant validation error: ${JSON.stringify(error)}`);
}
};
session.onpaymentauthorized = (event) => {
console.log("Payment authorized:", event.payment);
};
session.oncancel = () => {
console.log("Payment cancelled.");
};
session.onerror = (event) => {
console.error(`Apple Pay error: ${JSON.stringify(event)}`);
};
session.begin();
};
return (
<>
{paymentType === "APPLE_PAY" && (
)}
</>
);
};
export default ApplePayButton;
createAndValidateApplePaySession = async (data) => {
const { validation_url } = data;
const apiUrl = ${this.finixUrl}/apple_pay_sessions;
const base64Credentials = Buffer.from(this.credentials).toString("base64");
const body = {
validation_url,
merchant_identity: process.env.FINIX_APPLE_PAY_MERCHANT_ID,
domain: process.env.FINIX_APPLE_PAY_DOMAIN,
display_name: process.env.FINIX_APPLE_PAY_DISPLAY_NAME,
};
const requestData = {
url: apiUrl,
data: body,
headers: {
"Content-Type": "application/json",
Authorization: Basic ${base64Credentials},
},
};
try {
const response = await axios.post(requestData.url, requestData.data, {
headers: requestData.headers,
});
return response?.data;
} catch (error) {
console.error("Merchant validation failed:", error);
return error;
}
};
Current Behavior:
Apple Pay button renders successfully.
Clicking the button triggers the setupApplePaySession function.
The merchant validation completes successfully via the onvalidatemerchant callback, and a valid merchant session is received from the API.
The Apple Pay sheet appears briefly and then closes immediately.
The onpaymentauthorized callback is never triggered.
Expected Behavior:
The payment sheet should remain open after merchant validation, allowing the user to select a payment method and authorize the payment. The onpaymentauthorized callback should then be triggered to handle the payment token.
We have implemented In-App Provisioning, but when I start the tokenization process, I receive an error before the terms and conditions.
We are testing with a version of the app on TestFlight.
The error message is: Could not add card. Try again later or contact your card issuer for more information.
Could you please help me?
we are experiencing an issue when making an HTTP call to: "https://apple-pay-gateway-cert.apple.com/paymentservices/registerMerchant". The response we are receiving back is HTTP Status Code 401 Unauthorized.
We noticed the issues started around "Jan 24, 2025 at 9:51:46.327 am" and is still carrying on.
Some other examples of when the calls failed:
Jan 27, 2025 at 3:04:31.387 pm
Jan 27, 2025 at 9:46:04.068 am
Jan 27, 2025 at 3:36 pm
All of the above dates and times are UK GMT +0 times.
As the problem is around HTTP status code of 401 Unauthorised its tough to show what's actually happening.
Like I stated above everything was working correctly before the 24th of Jan and nothing has changed or been modified on our side.
I have even tried to do the following:
Use the first set of Certs to perform a test
Still returns 401
Delete a Cert and re generating them from scratch to perform a test with those set of Certs
Still returns 401
I have just tried to process another HTTP call to the paymentservices/registerMerchant and I could inspect the headers of the request and im hoping this helps in your investigation.
Headers:
x-keystone-correlationid = 8f9a3c16-f78f-4f9b-9484-63190ef14a77
Date = Tue, 28 Jan 2025 10:00:43 GMT
x-envoy-upstream-service-time = 4
x-apay-service-response-details = via_upstream
We also found an article that has us a bit worried about this issue. Article here: https://developer.apple.com/news/?id=2x8awlvm
States that Apple/Apple Pay will be making some changes to the ciphers in the coming months. With this article and the issues we seeing on Sandbox Environment we are worried that come the 4th of February as stated in the article that our Production Environment will be effected and we will stop being able to use Apple Pay so that gives us about a week to fix any issues/change code that might come out of it.
Please could you come back with some information around the Article posted and if our Production Environment would be impacted.
I am working on implementing merchant token notifications. When calling this endpoint https://developer.apple.com/documentation/merchanttokennotificationservices/merchant-token-event-retrieval, the result contains a CardMetadata object with an expirationDate field (see https://developer.apple.com/documentation/merchanttokennotificationservices/cardmetadata). What is the format of this field? The spec only mentions that it has a maximum length of 8 characters.
When integrating the Wallet Extension, after clicking my app icon from the "From Apps on Your iPhone" list, I encountered the message: "Cannot Add Card. '***' is not responding. Wait a few minutes and try again. If the problem continues, contact the card issuer's customer service" instead of the configured login page appearing as expected.
What could be causing this issue, and how should I resolve it?
To continue your enrollment, complete your purchase now
But when I tried to purchase
I am not able to pay
Topic:
App & System Services
SubTopic:
Apple Pay
Hi team,
I'm currently trying to add a specific subdomain (with a path) to Apple's Sandbox domain list, but it seems Apple only allows the main domain to be entered.
Due to strict client security policies, we aren't allowed to use just the main domain, which is creating a roadblock in our implementation.
Is there any way to add a full subdomain or URL path to the Sandbox configuration? I'm happy to join a call to explain the scenario further if that would help.
Thanks in advance for your support!
Hello everyone.
I encountered a problem when integrating Apple Pay. I obtained all the renewal orders through the Apple interface, and their purchaseDate is 8 hours later than the actual payment time. Why is this happening?
According to the documentation, the purchaseDate value provided by Apple is a millisecond timestamp that represents the actual payment time of the user, so theoretically there shouldn’t be any timezone issues.
This works well in client-initiated subscriptions, but in renewal scenarios, the purchaseDate becomes unreliable. Could this be due to some configuration in the configuration center?
For example, I actually received an Apple notification at 1746686911000 (2025-05-08 06:48:31 Etc/GMT).
However, the data returned by the Apple interface is as shown below:
{
"appAccountToken": "xxxx",
"bundleId": "xxxx",
"currency": "GBP",
"environment": "Production",
"expiresDate": 1762616831000,
"inAppOwnershipType": "PURCHASED",
"isUpgraded": false,
"offerDiscountType": "",
"offerIdentifier": "",
"offerType": 0,
"originalPurchaseDate": 1746456432000,
"originalTransactionId": "320002311698411",
"price": 39990,
"productId": "xxxx",
"purchaseDate": 1746715631000,
"quantity": 1,
"revocationDate": 0,
"revocationReason": 0,
"signedDate": 1746687092825,
"storefront": "GBR",
"storefrontId": "xxxx",
"subscriptionGroupIdentifier": "xxxx",
"transactionId": "320002315815857",
"transactionReason": "RENEWAL",
"type": "Auto-Renewable Subscription",
"webOrderLineItemId": "320001062124562"
}
You can see that the purchaseDate is 1746715631000 (2025-05-08 14:48:31 Etc/GMT), which is even later than the current time.
Can someone explain this behavior that is inconsistent with the documentation, or did I do something wrong?
I would be very grateful for any help anyone can provide.
Topic:
App & System Services
SubTopic:
Apple Pay
We are encountering an issue where Apple Pay shows an unexpected popup with a message and an "OK" button when confirming a payment (after double-tapping the power button). This issue began appearing last week without any changes to the codebase or configurations.
Steps to Reproduce:
Open the app and initiate an Apple Pay payment.
Add a valid card if not already present.
Confirm the payment using the side button (double-tap).
Instead of completing the transaction, a popup appears with a generic message and an "OK" button.
Expected Behavior:
Apple Pay should process the payment and provide a confirmation or error based on the transaction status.
Actual Behavior:
A popup appears with a generic title and an “OK” button. The transaction is not processed.
Environment Details:
Platform: iOS
Apple Pay integration has been functioning correctly for years
No recent updates to Apple Pay-related code or configuration
Configurations Checked:
App Identifier is correctly set with the bundle ID
Apple Pay Payment Processing is enabled in the App ID configuration
Correct Merchant ID is selected and matches in Xcode capabilities
*.entitlements file contains correct Apple Pay entitlement
Payment Processing Certificates are valid and in place
Additional Notes:
The issue appeared suddenly without any modifications to the app. We suspect it may be due to external changes (e.g., Apple system update or merchant validation issue).
Please advise on any further steps we can take to diagnose or resolve this issue.
Topic:
App & System Services
SubTopic:
Apple Pay
Hello,
I am looking for some help on how to use the Apple Pay Web Merchant Registration API. Have been approved to use the API and attempted to test on a merchant ID set up for testing. Below are steps taken before the request.
Create merchant ID com.test.merchant.
Create Apple Pay Merchant Identity Certificate for using it with the request via p12.
Create Platform Integrator platformintegrator.com.test
With the below request, I am getting a 401. Any input would be much appreciated!
curl --cert-type P12 --cert cert.p12:{password} -i -d '{\
"domainNames":["customer.test.com"],\
"partnerMerchantName": "customer.test.com",\
"partnerInternalMerchantIdentifier":"customer.test.com"}'\
"encryptTo":"com.test.merchant",\
https://apple-pay-gateway-cert.apple.com/paymentservices/registerMerchant
The response:
{
"statusMessage": "Payment Services Exception Unauthorized",
"statusCode": "401"
}
Also tried using the platformintegrator.com.test for the encryptTo but resulted in a 401 as well.
Topic:
App & System Services
SubTopic:
Apple Pay
Hello,
I have had a problem with Transaction shortcut automation since last month, the automation does not work anymore.
Whenever a transaction is done, I tap in the notification to run the automation but always gives the error "Automation failed".
I can confirm the automation worked last month but suddenly it is not working anymore. Below is the screenshort of the error and the other image is how it appeared in numbers when running the automation.
As you can see, in Jan 8th worked fine (that is why the full name of the card appears). Actually, the other rows are from another shortcut that I have.
I would really appreciate if anyone has any insights about that, or if this happened to you as well.
Thanks in advance! Arnold
During checkout at apple.com using a non-supported Apple Pay on the Web browser, apple.com presents a QR like code offering to "Scan Code with iPhone" to pay. The payment continues using Apple Pay on the iPhone after scan.
We already offer Apple Pay and Apple Pay on the Web. Is this QR code option available for us for non-supported browsers? Could you point me to the docs to add it? Thank you.
Topic:
App & System Services
SubTopic:
Apple Pay
I’m trying to test an AMEX card in the sandbox environment, but it’s not getting added. I have followed and verified the checks below to add the card to Wallet:
Sandbox account is active.
Sandbox user region is set to the US.
Device region is also set to the US.
AMEX card from the provided list is being added.
Tested on iOS version 17.6.1
Devices tested include iPhone 13 and others.
Steps followed to add the card to Wallet:
Open Wallet and tap on "Add Card."
Entered the required test data.
Tapped "Agree" and waited.
Received error: "Issuer does not support this card."
Please let me know if you have any solutions.
Hello,
Please help.
We have been experiencing what appears to be a TLS handshake error in our Apple Pay merchant validation requests (2-way TLS) since June 25, 2025.
We are aware of the encryption algorithm changes made in February 2025, and our system was functioning correctly at that time. However, the error started occurring suddenly and only recently.
Could you please clarify the following points?
Have there been any changes to the TLS configuration (cipher suites, certificates, protocol versions, etc.) on the Apple Pay server side since June 2025?
Have there been any updates to the specifications or recommended settings for merchant validation requests?
Is there any way to contact Apple for technical support regarding this issue other than through the Developer Forums?
Our Merchant Identity Certificate has already been renewed and is confirmed to be valid.
Topic:
App & System Services
SubTopic:
Apple Pay
Hello,
I am experiencing an issue with the Apple Pay capability on my App ID.
I have created a Merchant ID.
I enabled Apple Pay in the App ID configuration and linked it to the merchant.
However, sometimes when I revisit the App ID in the Apple Developer portal, the Apple Pay capability appears disabled, even though I saved it.
This happens intermittently; at some times the capability is correctly shown as enabled, and other times it disappears.
Context:
I am using Expo Managed Workflow with EAS Build for iOS.
The issue prevents the provisioning profile from including Apple Pay, which causes Stripe isPlatformPaySupported function to return false on ios devices.
Attached:
Screenshots of the App ID page showing Apple Pay enabled and disabled.
Could you please advise why the capability is not being consistently saved, and how to ensure it stays enabled?
Thank you,
Can i use apple pay integration into my web iframe?In my situation, canMakePayment() returns null when i check browser support apple pay or not in Iframe
Hello Apple Developer Team/Community,
I am working on developing an Apple Wallet pass with NFC functionality for our electric vehicle (EV) charging stations. The goal is to enable a "tap-to-start charging" feature, providing a seamless and efficient experience for users. However, my request for an NFC certificate to enable this functionality has been rejected.
Here is a summary of my use case and actions taken so far:
1. Use Case:
The Wallet pass will allow users to initiate charging sessions by tapping their iPhones or Apple Watches on the EV charger.
This feature aims to simplify the process by eliminating the need for additional apps, physical cards, or manual inputs.
It enhances accessibility and aligns with Apple’s goals of providing users with secure and convenient solutions.
2. Steps Taken:
Submitted the NFC certificate request with a detailed explanation of the functionality.
Included diagrams and supporting documents demonstrating the workflow and system readiness.
Received a rejection without clear guidance on how to address the issue.
3. Technical Readiness:
Our backend is fully prepared to support NFC passes, including secure processing of tap events and payload encryption.
The Wallet pass has been configured to include the nfc field with the required encryptionPublicKey.
Request for Assistance:
Could you provide guidance on improving my application to meet Apple’s criteria for NFC certificates?
Are there specific requirements or examples of successful NFC-enabled Wallet pass applications that I can use as a reference?
If anyone has faced a similar rejection, what steps did you take to get approval?
Additional Information:
Use case: EV charging stations
NFC functionality: Tap-to-start charging session
Current implementation: Pass is functional without NFC but requires NFC for seamless operation.
Any advice or resources to help resolve this issue would be greatly appreciated. Thank you for your time and support.
Best regards,
DeveloperSquillion
When I click to my Apple Pay button, my function below doesn't trigger the completeMerchantValidation method as expected, but the oncancel method (which logs errorCode "unknown" in Safari developer tools) :
const processApplePayment = async () => {
if (window.ApplePaySession) {
const session = new window.ApplePaySession(6, {
countryCode: 'FR',
currencyCode: 'EUR',
merchantCapabilities: ['supports3DS'],
supportedNetworks: ['visa', 'masterCard'],
total: {
label: `Bon d'achat ${partnerName}`,
type: 'final',
amount: cartTotalValue.toString()
}
});
session.onvalidatemerchant = async event => {
try {
const merchantSession = await validateMerchantSession(event.validationURL);
console.log('merchant session : ', merchantSession);
if (!merchantSession) {
console.error('Invalid Apple Pay merchant session');
}
session.completeMerchantValidation(merchantSession);
} catch (error) {
console.error('merchant validation error : ', error);
session.abort();
}
};
session.onpaymentauthorized = async event => {
console.log('payment authorization event : ', event);
try {
const link = await authorizePayment(
event.payment.token,
userInfo,
partnerId,
order.id
);
console.log('payment authorized link : ', link);
window.location.href = link;
} catch (error) {
console.error('Apple Payment authoriation error : ', error);
const errorUrl = `${PATH.EBON_ERROR_PATH}-${partnerId}?paiement=error&orderId=${order.id}`;
window.location.href = errorUrl;
}
};
session.oncancel = event => console.log('Apple Pay cancel event : ', event);
session.begin();
}
};
The validateMerchantSession function successfully returns this payment session from Apple server :
{
"epochTimestamp":1739279973502,
"expiresAt":1739283573502,
"merchantSessionIdentifier":"SSH108C7ED6746A48E38EA8D253D33CCAA5_916523AAED1343F5BC5815E12BEE9250AFFDC1A17C46B0DE5A943F0F94927C24",
"nonce":"150de193",
"merchantIdentifier":"11CA4E31493E748848A91A0DAB1685A8417C41B62B9863EF59A618B91239471A",
"domainName":"lesnumeriques-bonsdachat.htmal1.com",
"displayName":"Les Numériques",
"signature":"308006092a86...779cd643c000000000000", // long string
"operationalAnalyticsIdentifier":"Les Numériques:11CA4E31493E748848A91A0DAB1685A8417C41B62B9863EF59A618B91239471A",
"retries":0,
"pspId":"11CA4E31493E748848A91A0DAB1685A8417C41B62B9863EF59A618B91239471A"
}
What could I do wrong and how could I fix it please ?
Topic:
App & System Services
SubTopic:
Apple Pay
Hi,
Please refer the info graphic .
I'm an issuer Bank App, who wants to add a card to phone's Digital Wallet.
When I hit add to Apple or Google wallet, my API call goes to a Token Requester server and then to Token Service provider.
In this process, I do get a JWT token back, but when I try to add token to Digital Wallet, I always get the message "The pass cannot be read because it is not valid".
So few question:
Is there a way to debug the token that is received by the app?
Is there any kind of API console that I can look to see what is happening and why the pass is not valid?
I, being the Issuer Bank App, a Token Service Requester and A Token Service Provider, who should be communicating with Apple servers?
Are there any documents that explicitly shows (example) the flow of adding a credit card to Digital Wallet from iOS perspective?
Any other help is appreciated.
On my end, I have done this:
public void AddToDeviceAsync(string data)
{
try
{
var dataArray = Encoding.UTF8.GetBytes(data);
if (data.Length > 0)
{
if (PKAddPassesViewController.CanAddPasses && PKPassLibrary.IsAvailable)
{
_nsData = NSData.FromArray(dataArray);
ObjCRuntime.Class.ThrowOnInitFailure = false;
_pkPass = new PKPass(_nsData, out NSError e);
if (!string.IsNullOrWhiteSpace(e?.LocalizedDescription))
{
UserDialogs.Instance.AlertAsync(e.LocalizedDescription, AppResources.Alert);
return;
}
if (!PkLibrary.Contains(_pkPass))
{
var controller = new PKAddPassesViewController(_pkPass);
var rootViewController = UIApplication.SharedApplication.Delegate.GetWindow().RootViewController;
if (rootViewController != null)
{
var topController = TopViewControllerWithRootViewController(rootViewController);
topController?.PresentViewController(controller, true, null);
}
}
else
{
UserDialogs.Instance.AlertAsync(AppResources.Pass_Already_Present, AppResources.Alert);
}
}
}
else
{
UserDialogs.Instance.AlertAsync(AppResources.Invalid_Pass_Data, AppResources.Alert);
}
}
catch (Exception e)
{
UserDialogs.Instance.AlertAsync(e.Message, AppResources.Alert);
}
}
Topic:
App & System Services
SubTopic:
Apple Pay