Hi, we are implementing the push provisioning via the Apple Wallet Extension starting from the example at https://developer.apple.com/documentation/passkit/implementing-wallet-extensions.
To correctly manage the push provisioning on Apple Watch, specifically for a card tokenised in the iPhone but not in the Watch, we need to know if there is a connected Apple Watch to the iPhone.
We are using the following code from the Apple Wallet Extension example to detect whether there is a connected watch:
WCSession* session = [WCSession defaultSession];
session.delegate = delegate;
[session activateSession];
In the main target of the app, at the end of the activation the system correctly calls the delegate method:
session:activationDidCompleteWithState:error:
but we noticed it is not being called in the UI extension context (the one having NSExtensionPointIdentifier: com.apple.PassKit.issuer-provisioning.authorization).
We don't understand why the delegate is not being called in the UI extension, can you please help?
Thanks!
Steps to Reproduce:
Start with a card not added in the Apple Wallet app
Open the Apple Wallet app
Click on add card
Select the app to launch the Wallet Extension flow
The Apple Wallet Extension with UI is on screen and invokes the activateSession method, the delegate method is not invoked and session.isPaired returns "no".
Xcode Version
16.2
macOS Version
15.6.1 (24G90)
Feedback ID
FB20082564
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
The details provided in this documentation do not seem have instructions on configuring authentication for the user webhook. I plan on using oauth with the webhook, but I do not know where to provide the relevant issuer and client id/secret to the merchant token management service.
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
We received a request directly from /apple/notifications. This subscription is not a renewal, but a first-time purchase. We associate the originalTransactionId with the user's ID to identify the subscribed user. However, since we do not have access to the user's ID on our server through this direct request, we are unable to properly process the subscription.
How should we handle this type of subscription request?
What is the source of this subscription, and why are some users able to bypass in-app purchases for first-time subscriptions and make the purchase directly?
Topic:
App & System Services
SubTopic:
Apple Pay
Hello I'm getting an error when the Apple Pay sheet opens on a third party browser like Chrome when completeShippingMethodSelection is called
'DataCloneError: Failed to execute 'postMessage' on 'Window': #<Object> could not be cloned.'
I'm also seeing this warning when the apple pay sheet opens
Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://applepay.cdn-apple.com') does not match the recipient window's origin
although I also see this warning on https://applepaydemo.apple.com/
Hi Support,
When the applepay express transit option is used on emv payment cards,
like this
iPhone - Open “Settings” → “Wallet & Apple Pay” → “Express Transit Card”.
And a emv single card has been enabled under Express Transit
And on transit reader Apple Enhanced contactless Polling support is provided, ( with VAS not supported, user authentciation not supported)
Sometimes ATQB response also comes from the iPhone or iWatch instead of the ATQA response, and then it causes the transit reader to report as collision error in the polling.
Sequence of the packets:
WUPA
WUPB
ECP frame
WUPA
WUPB
ATQB
WUPA
ATQA
Topic:
App & System Services
SubTopic:
Apple Pay
Hello,
I am following up on my previous feedback (Feedback ID: FB17175593) regarding the in-app provisioning failure for Apple Pay. In that report, I detailed errors encountered during the card addition process (notably issues related to a missing teamID and cryptographic material errors). Could you please provide an update on the investigation progress? I appreciate your assistance and look forward to your response.
I am trying to do a mass enablement of a merchant ids for a psp.
The ids have been approved by apple. I am attempting to add more using the Post Request: https://apple-pay-gateway.apple.com/paymentservices/registerMerchant
(https://developer.apple.com/documentation/applepaywebmerchantregistrationapi/register_merchant) but am always getting a Refuse to connect error.
What authentication is required to get a 200 successful response?
Hello Dear Network,
We are developing a banking application and are implementing Apple Wallet
In-App Provisioning with Wallet UI and Non-UI extensions.
Our App Store submission fails with the error:
"Missing entitlement com.apple.developer.payment-pass-provisioning"
for both Wallet UI and Non-UI extensions.
In the Apple Developer portal, we do not see the "Apple Pay" or
"In-App Provisioning" capabilities available for our App ID or
extension App IDs.
We would like to request enablement of:
Apple Pay
Payment Pass Provisioning
In-App Provisioning
for our Apple Developer Team and related App IDs.
Please let us know what we need to do for can upload build with that Entitlements, what can be problem?
Thank you.
When running the test app with test flight before actually opening the app, the execution region is Korea and the country code is Korea, but the currency code on the payment screen is displayed as dollars or euros instead of won. In the payment settings, the currency code is set to won for Korea and dollars for the United States, and the European region is not set at all, but in some phones it is displayed as euros, and in some phones it is not like this, and in some cases it is displayed as won normally.
Hello,
I am setting up a feature for my company's banking app that allows users to add their payment/debit card they have with us to the Apple Wallet on their device. We have the in-app provisioning entitlement setup and configured in the app and configured with our banking partner/TSP. We are able to manually provision production environment cards via the Wallet app.
I am using test card data from my TSP. I send them the two certificates, nonce, and nonce signature data and am given activationData, encryptedPassData, and an ephmeralPublicKey that we then set on an instance of PKAddPaymentPassRequest. We call the handler on the delegate method that is called with that request object and get an error:
The operation couldn’t be completed. (PKPassKitErrorDomain error 2.)
Looking at the PassKit library shows this is PKUnsupportedVersionError - Unsupported pass version.
Our TSP hasn't been super helpful in troubleshooting this issue and just said we should contact Apple as it is an Apple error.
I am trying to figure out if the issue is with how we are implementing the feature or with the test data itself given to us.
Topic:
App & System Services
SubTopic:
Apple Pay
We have finished integrating Apple Pay in our app and our payment processor is requiring us to send the 3dSecure version used for apple pay (2.1,2.2,2.3,etc.). I believe this only applies to mastercard but would appreciate if anyone has run into something similar and what you specified. I have not been able to find anything in Apple's documentation specifying the version that is used.
Does anyone have info about the Retention Messaging API. We've requested access to it, but there's no answer.
Topic:
App & System Services
SubTopic:
Apple Pay
Body:
Hello,
We are currently implementing iOS order verification and have encountered an issue. Some of the receipts we verify return with an empty in_app array, which makes it impossible to determine whether there is a valid in-app purchase.
Below is the code we’re using for verification and the result we receive:
Code Example:
public function iosVerifyReceipt($receipt, $password = '', $sandbox = false)
{
$url = $sandbox ? 'https://sandbox.itunes.apple.com/verifyReceipt' : 'https://buy.itunes.apple.com/verifyReceipt';
if (empty($password)) {
$data = json_encode(['receipt-data' => $receipt]);
} else {
$data = json_encode(['receipt-data' => $receipt, 'password' => $password]);
}
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result, true);
$result = $result ?? [];
$result['sandbox'] = $sandbox;
if ($result['status'] != 0) {
Log::warning('ios verify receipt failed', ['receipt' => $receipt, 'result' => $result, 'sandbox' => $sandbox]);
if ($result['status'] == 21007) {
return $this->iosVerifyReceipt($receipt, $password, true);
}
}
return $result;
}
// Order validation check
if (empty($result) || $result['status'] != 0) {
throw new BadRequestHttpException("Ios Order Verify Error");
}
$appItemId = $result['receipt']['app_item_id'] ?? "";
if ($appItemId != MY_APP_ID) {
throw new BadRequestHttpException("Ios Order Verify Error");
}
$inApp = array_filter(
$result['receipt']['in_app'] ?? [],
function ($item) use ($transactionId,$order) {
return $item['transaction_id'] == $transactionId && $item['product_id'] == $order->getProductId();
}
);
if (empty($inApp)) {
throw new BadRequestHttpException( "Ios Order Verify Error");
}
Array
(
[receipt] => Array
(
[receipt_type] => Production
[adam_id] => *
[app_item_id] => *
[bundle_id] => *
[application_version] => 5511
[download_id] => *
[version_external_identifier] => *
[receipt_creation_date] => 2025-02-11 04:06:47 Etc/GMT
[receipt_creation_date_ms] => *
[receipt_creation_date_pst] => 2025-02-10 20:06:47 America/Los_Angeles
[request_date] => 2025-02-11 15:54:56 Etc/GMT
[request_date_ms] => *
[request_date_pst] => 2025-02-11 07:54:56 America/Los_Angeles
[original_purchase_date] => 2025-02-11 04:02:41 Etc/GMT
[original_purchase_date_ms] => *
[original_purchase_date_pst] => 2025-02-10 20:02:41 America/Los_Angeles
[original_application_version] => *
[preorder_date] => 2025-01-17 21:12:28 Etc/GMT
[preorder_date_ms] => *
[preorder_date_pst] => 2025-01-17 13:12:28 America/Los_Angeles
[in_app] => Array
(
)
)
[environment] => Production
[status] => 0
[sandbox] =>
)
Hi All,
We operate a store with a single domain but multiple merchants, some of whom use PayPal as their payment gateway, while others use Stripe. We are looking to introduce Apple Pay for the various merchants. From what I understand, a .well-known file is required for each merchant to enable Apple Pay. How can we implement this, given that our merchants are using different payment gateways?
Best regards,
Joe
We created apps for many credit unions in Canada. Some of those apps has the feature to directly add users' debit cards to Apple Wallet (which is called by Apple as "in-app provisioning"). The feature has been working fine for at least 6 years for many credit unions. Recently, after updating one of those existing apps, we found out that the in-app provisioning is no longer working. Found it very strange, as we didn't touch the code base related to this feature for a very long time. One thing we found out is that the option to add in-app provisioning entitlement is missing during generating "provisioning profile" for the app. Is this a misconfiguration by App? Or do we need to request for additional entitlement migration as mentioned in the page: https://developer.apple.com/help/account/reference/provisioning-with-managed-capabilities ? Apple, please help, it's rather urgent.
I have a question regarding the file apple-developer-merchantid-domain-association.txt.
I understand that this file is used during API access for Apple Pay Web payments. However, is it necessary for our company to access this file during the payment process?
Also, this domain validation file is expected to be placed in the publicly accessible “.well-known” folder on our web server. Is it acceptable for this file to remain readable by third parties on the Internet, including Apple’s servers, without posing any security risks?
Since this file is generated during domain registration on the Apple Developer site and is unique to our domain, we believe there should be no security concerns even if accessed by third parties. However, are there any specific security requirements for this domain validation file?
Please note that the domain validation has already been successfully completed.
We appreciate your time and look forward to your guidance.
Best regards,
Hi,
We have app in which we take donations from people and send to non-profit organisations. I have read that Apple Pay can be integrated on non profit platforms to take donations, but we are middle man, we are not non profit .. we take donations, cut our platform fees and then sent to donations to non profit orgs.
My question is can we integrate Apple Pay in our iOS app to take donations from apple? as we have integrated Apple Pay on the web.
Topic:
App & System Services
SubTopic:
Apple Pay
Tags:
Apple Pay on the Web
Apple Pay
Tap to Pay on iPhone
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
Dear Apple team and developers,
We integrated Apple Pay E-Commerce on our system and made successful transaction at January using following certificates.
Merchant Identity Certificate (generated from our Apple developer account)
Payment Processing Certificate (generated from our Apple developer account)
Payment Session Server Certificate (used following command and generated from apple-pay-gateway-cert.apple.com:443 test URL)
Command: openssl s_client -connect apple-pay-gateway-cert.apple.com:443 -key MIC_priv.key -cert MIC_merchant_id.pem -showcerts | openssl x509 -outform DER > apay_ident_trusted_cert_test.der
Root CA G3 (Downloaded “Apple Root CA – G3 Root” from https://www.apple.com/certificateauthority/ )
But at this month, we got new certificate problem (please check following) when we try to execute Apple Pay E-Commerce transaction.
Certificate 'C=US,O=Apple Inc.,OU=Apple Certification Authority,CN=Apple Application Integration CA - G3' is not valid Certificate.
What is this certificate? And Where can I download or generate this certificate from? Could you please advise/give us good information for this certificate problem?
Best Regards,
Bilguun Enkhbaatar
Topic:
App & System Services
SubTopic:
Apple Pay
Tags:
Developer Tools
Apple Pay on the Web
Apple Pay