I can’t send or receive money with Apple Cash My account is restricted but only Apple Cash everything else works fine help
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
Hello, we re developing a loyalty platform for end users and as such emit Apple wallet store cards. Problem we're facing is that the HTTP POST /v1/devices/:deviceLibraryIdentifier/registrations/:passTypeIdentifier/:serialNumber in some cases doesn't come through and we have no idea why.
This only happens to a small percentage of customers, others work just fine.
Does anyone have an idea why this might happen? I believe our setup is correct when 90% of customers work and we receive these HTTP requests to our server.
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
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] =>
)
My Raiffeisen ELBA-App doesnt work anymorw since i downloaded ios 26 beta 3 i cant open the app pls fix it because its my only banking app
Topic:
App & System Services
SubTopic:
Apple Pay
Hi,
We're experiencing an issue with verifying our domain for Apple Pay on the web. It's currently stuck in the "Pending" state despite meeting the listed requirements. The domain in question has been verified once successfully but one month later when we renewed the SSL, we were unable to verify the domain again. Please note that the new certificate's CA chain has been changed.
A) The "apple-developer-merchantid-domain-association.txt" file is publicly accessible at the following location:
/.well-known/apple-developer-merchantid-domain-association.txt
B) We've also ensured that the following IP ranges are whitelisted:
17.32.139.128/27
17.32.139.160/27
17.140.126.0/27
17.140.126.32/27
17.179.144.128/27
17.179.144.160/27
17.179.144.192/27
17.179.144.224/27
17.253.0.0/16
17.23.4.96/27
17.132.108.64/26
17.23.24.32/27
17.23.19.0/27
17.157.40.128/27
17.157.44.128/27
17.157.32.0/27
C) Our servers support TLS 1.2 already.
D) "ECDHE-RSA-AES128-GCM-SHA256" cipher suite has been used, so we believe all necessary criteria are satisfied.
However, when we attempt to verify the domain, we receive the following error message:
"Domain verification failed. Review your TLS Certificate configuration to confirm that the certificate is accessible and a supported TLS Cipher Suite is used."
Could you please advise why the verification is failing, or let us know if there's anything we might have missed?
Best regards,
Mehdi
We are trying to develop a coupon/offer code module where our app users can avail a free trail offer for 2 months period after applying the code. We already had a subscription module with monthly & yearly subscriptions with 7 day free trial period. Now, we want to implement a offer/coupon module, where, a user can either select monthly or yearly subscription, and upon entering the offer/coupon code, they will get 2 months free trial (or) a discount on the chosen subscription. (this will overwrite the existing 7 day free trial).
We are confused on choosing the type of “offer/coupon” from AppStore connect. In App Store connect, we have introductory offers, promotional offer & Offer codes. Based on our requirements, we have done research and found that we cannot implement the offer code & promotional codes in the develop environment as there is no possibility to test in Sandbox environment. We observed that we need to push the app to App store and upon approval, we need to implement “offer/coupon” module.
Can some one please suggest or guide us on choosing the best solution for our requirement?
Thanks in advance.
Topic:
App & System Services
SubTopic:
Apple Pay
Tags:
Subscriptions
App Store Connect
In-App Purchase
Hello everyone, I have a small error 23. I wanted to know if you also already have this error so in the simulator it works, I have no error, but once I do in the TestFlight I have the error that appears error 23, can anyone help me on this? Thanks a lot.
Hi there,
is there a way, or a list of test cards, to simulate error on payment in an Apple Pay sandbox environment ?
I tried different cards mentioned here but every try was successful : https://developer.apple.com/apple-pay/sandbox-testing/
Topic:
App & System Services
SubTopic:
Apple Pay
Hi support,
I'm getting the following error when I tried to re-verify my domain:
Domain verification failed. Review your TLS Certificate configuration to confirm that the certificate is accessible and a supported TLS Cipher Suite is used.
I have uploaded the required apple-developer-merchantid-domain-association.txt file and it is reachable from the Internet in the proper location https://www..com/.well-known/apple-developer-merchantid-domain-association.txt.
The SSL certificate has been renewed and it offers at least one of required cipher suites based on the Apple document https://developer.apple.com/documentation/applepayontheweb/setting-up-your-server.
The current verification will expire soon. Need your help urgently.
Thanks,
YaoF
Topic:
App & System Services
SubTopic:
Apple Pay
We have a checkout page on which clients can configure the providers we've integrated with for each currency.
One such provider is Stripe, with which we have already integrated ApplePay and host a merchant domain association file.
Now, we're getting requests to support ApplePay with other providers.
The issue is that we can't tell Apple to use a different path to domain association file for domain verification.
And, replacing the existing domain association file seems like a hack, since I believe it's needed for domain re-verification.
We're thinking of using subdomains for serving the domain association files for different providers.
But, we have some questions on how ApplePay domain verification works to understand how we can solve our problem.
Firstly, can we use subdomains for individual domain verification? If we already have example.com verified with Stripe, can we serve the domain association file for the other provider with provider.example.com and have the verification work?
Secondly, let's say our domain is example.com, and we can use provider.example.com to serve the domain association file and verify the domain. Then on example.com/checkout, will using an iframe with provider.example.com/applepay to host the ApplePay button work?
This thread suggests otherwise, but we want to confirm.
Lastly, is the only way to make an ApplePay payment for provider.example.com to use that subdomain? So redirecting to provider.example.com/applepay would work?
Thanks for your help!
We are attempting to integrate the Apple Pay service into our website and have successfully verified our domain with Apple manually. However, we consistently receive an 'ApplePay reverify failed' email a month before the expiration time. Upon checking, we updated the SSL certificate for the domain before receiving the email, and the link still works fine in the browser. We would greatly appreciate any feedback from someone who can help us with this issue.
Hi!
I am working on automating the Apple Pay integration process in our CI/CD pipeline and would like to confirm whether a fully automated setup is currently possible for our preproduction environment.
Right now, our process is as follows:
A certificate is generated for the root domain and for each individual merchant subdomain.
Both certificates are manually uploaded to our preproduction servers to test and verified via HTTP.
We’d like to automate this flow in GitLab CI, mainly the generation of the necessary certificates programmatically or via API. However, from my research, it seems that Apple does not currently provide an API or any support to automate this task, but I’d like to confirm this directly with you.
Is there any official support or workaround for this kind of automation?
If not, do you have any plans to provide it in the future?
Thanks in advance for your help.
I'm successfully using Apple subscriptions in my app, but I'm encountering SKErrorCodeDomain error 18 when trying to apply a subscription offer.
I want apply offer code first time only for subscription. Below are details of what i set in appstore and what i have tested.
Subscription Offer Details
Offer Type: For the first month
Customer Eligibility: New, Existing, and Expired Subscribers
Code Status: Active
Offer Code Creation Steps:
App Store Connect → App → Subscription → Select Subscription Product → Offer Codes → Add → Add Custom Codes
Signature Generation for Promotional Offers
I'm following Apple's documentation to generate a signature:
https://developer.apple.com/documentation/storekit/generating-a-signature-for-promotional-offers
I’ve constructed the payload as instructed:
appBundleId + '\u2063' + keyIdentifier + '\u2063' + productIdentifier + '\u2063' + offerIdentifier + '\u2063' + appAccountToken + '\u2063' + nonce + '\u2063' + timestamp
Keys and Identifiers
keyIdentifier, issuerId, and .p8 file are obtained from:
App Store Connect → Users and Access → Integrations → In-App Purchase
Test user created under:
App Store Connect → Users and Access → Sandbox → Test Accounts
Logged in with this account on the iPhone
What I’ve Tried
Verified all values used in the payload are correct
Tried both seconds and milliseconds for the timestamp (as per documentation, it should be in milliseconds)
Tried setting appAccountToken to:
a valid UUID
an empty string
not setting it at all
Used Apple’s sample code to generate a signature: https://developer.apple.com/documentation/storekit/generating-a-promotional-offer-signature-on-the-server
Verified the generated signature locally, and it validated successfully: https://developer.apple.com/documentation/storekit/generating-a-signature-for-promotional-offers#Validate-locally-and-encode-the-signature
Apple’s sample code to generate a signature
Downloaded from
const express = require('express');
const router = express.Router();
const crypto = require('crypto');
const ECKey = require('ec-key');
const secp256k1 = require('secp256k1');
const uuidv4 = require('uuid/v4');
const KeyEncoder = require('key-encoder');
const keyEncoder = new KeyEncoder('secp256k1');
const fs = require('fs');
function getKeyID() {
return "KEYIDXXXXX";
}
router.post('/offer', function(req, res) {
const appBundleID = req.body.appBundleID;
const productIdentifier = req.body.productIdentifier;
const subscriptionOfferID = req.body.offerID;
const applicationUsername = req.body.applicationUsername;
const nonce = uuidv4();
const currentDate = new Date();
const timestamp = currentDate.getTime();
const keyID = getKeyID();
const payload = appBundleID + '\u2063' +
keyID + '\u2063' +
productIdentifier + '\u2063' +
subscriptionOfferID + '\u2063' +
applicationUsername + '\u2063'+
nonce + '\u2063' +
timestamp;
// Get the PEM-formatted private key string associated with the Key ID.
// const keyString = getKeyStringForID(keyID);
// Read the .p8 file
const keyString = fs.readFileSync('./SubscriptionKey_47J5826J8W.p8', 'utf8');
// Create an Elliptic Curve Digital Signature Algorithm (ECDSA) object using the private key.
const key = new ECKey(keyString, 'pem');
// Set up the cryptographic format used to sign the key with the SHA-256 hashing algorithm.
const cryptoSign = key.createSign('SHA256');
// Add the payload string to sign.
cryptoSign.update(payload);
/*
The Node.js crypto library creates a DER-formatted binary value signature,
and then base-64 encodes it to create the string that you will use in StoreKit.
*/
const signature = cryptoSign.sign('base64');
/*
Check that the signature passes verification by using the ec-key library.
The verification process is similar to creating the signature, except it uses 'createVerify'
instead of 'createSign', and after updating it with the payload, it uses `verify` to pass in
the signature and encoding, instead of `sign` to get the signature.
This step is not required, but it's useful to check when implementing your signature code.
This helps debug issues with signing before sending transactions to Apple.
If verification succeeds, the next recommended testing step is attempting a purchase
in the Sandbox environment.
*/
const verificationResult = key.createVerify('SHA256').update(payload).verify(signature, 'base64');
console.log("Verification result: " + verificationResult)
// Send the response.
res.setHeader('Content-Type', 'application/json');
res.json({ 'keyID': keyID, 'nonce': nonce, 'timestamp': timestamp, 'signature': signature });
});
module.exports = router;
Postman request and response
Request URL: http://192.168.1.141:3004/offer
Request JSON: {
"appBundleID":"com.app.bundleid",
"productIdentifier":"subscription.product.id",
"offerID":"OFFERCODE1",
"applicationUsername":"01234b43791ea309a1c3003412bcdaaa09d39a615c379cc246f5f479760629a1"
}
Response JSON: {
"keyID": "KEYIDXXXXX",
"nonce": "f98f2cda-c7a6-492f-9f92-e24a6122c0c9",
"timestamp": 1753510571664,
"signature": "MEYCIQCnA8UGWhTiCF+F6S55Zl6hpjnm7SC3aAgvmTBmQDnsAgIhAP6xIeRuREyxxx69Ve/qjnONq7pF1cK8TDn82fyePcqz"
}
Xcode Code
func buy(_ product: SKProduct) {
let discountOffer = SKPaymentDiscount(
identifier: "OFFERCODE1",
keyIdentifier: "KEYIDXXXXX",
nonce: UUID(uuidString: "f98f2cda-c7a6-492f-9f92-e24a6122c0c9")!,
signature: "MEYCIQCnA8UGWhTiCF+F6S55Zl6hpjnm7SC3aAgvmTBmQDnsAgIhAP6xIeRuREyxxx69Ve/qjnONq7pF1cK8TDn82fyePcqz",
timestamp: 1753510571664)
let payment = SKMutablePayment(product: product)
payment.applicationUsername = "01234b43791ea309a1c3003412bcdaaa09d39a615c379cc246f5f479760629a1"
payment.paymentDiscount = discountOffer
SKPaymentQueue.default().add(payment)
}
Issue
Even following instructions to the documentation and attempting various combinations, the offer keeps failing with SKErrorCodeDomain error 18.
Has anyone else experienced this? Any suggestions as to what may be amiss or how it can be corrected?
Topic:
App & System Services
SubTopic:
Apple Pay
Tags:
Subscriptions
In-App Purchase
Apple Pay
App Store Server Library
The Shortcuts app offers the possibility to trigger shortcuts/intends when a wallet credit card is used and a new transaction is created.
I would like to add transaction details to one of my apps and use such a shortcut for it. Other apps do the exact same thing, so this should not be a problem.
Adding a shortcut to my app was not a big deal. However, how can this be tested on simulator?
When trying to add a new automatization in the Shortcuts app using a wallet transaction as trigger I cannot finish the setup dialog since the Next button is disabled. I assume this is because no card is configured.
When trying to add a card in Wallet I just receive that this was not successful.
I have connected the simulator to a Sandbox Apple ID account using a region which supports Apple Pay (US). Using a real account does not solve the problem.
Any idea how to get this working?
Using real transaction within a store could obviously not be the solution for debugging.
Earlier this year implemented saving event tickets to Apple Wallet (and Google Wallet, which was painful by comparison!), as an optional alternative to recipients leaving the QR Codes in email or printing them.
Scanning barcodes on entry is done using camera on phones (either iPhone or Android). This is a somewhat pressured situation with lots of people needing scans in quite a short period of time. I do not do this myself but I do get feedback.
it was reported to me that Apple Wallet barcodes are significantly harder to scan accurately than those in Google Wallet. They think that is because the Apple QR Codes are quite a bit smaller (and presumably harder, therefore, to get focussed properly). They do work, it just takes longer to get a successful scan. This doesn’t seem to be anything I can control, and there seems to be plenty of space to make them bigger, even on my iPhone mini. These aren’t terribly dense barcodes; I imagine they would be harder still if they were. I also guess specialised barcode readers might do better, but we don’t have that luxury.
I’d appreciate it if they could be bigger when displayed in Apple Wallet, or at least to have that as an option.
When apple pay on the web does a onshippingcontactselected it appears to truncate the zip code.
If I enter:
11111
or
11111-1111
I always get 11111. Is there any way to get the plus 4?
We have an app and we want to add tap to pay for Apple Pay. We'd also like to become a certified Payment Service Provider. What is the process to become a certified PSP?
Topic:
App & System Services
SubTopic:
Apple Pay
We have developed Apple Wallet Extension for our App. The in-app provisioning for the card is working. However when we try to add the card from Wallet extension it gives error saying "Your issuer does not yet offer support for this card".
From the apple documentation we can see the issues is same as mentioned in Scenario 2 at following link https://applepaydemo.apple.com/in-app-provisioning#8.4
We are getting eligibilityStatus as 0
Below is the response from Wallet captured using SysDiagnosis
https://crt-pod1-smp-device.apple.com:443/broker/v4/devices/0434320BCB1A90022306073796318273728D0A367FA927F4/cards 200 Time profile: 1.77856 seconds
{
x-conversation-id = ......
Content-Type = "application/json"
x-pod = "crt-pod1"
x-xss-protection = "1; mode=block"
Server = "Apple"
x-pod-region = "paymentpass.com.apple"
regionbrokerurl = "https://crt-pod1-smp-device.apple.com:443/broker"
Date = "Wed, 06 Aug 2025 11:39:30 GMT"
Content-Length = "488"
x-envoy-upstream-service-time = "1400"
Strict-Transport-Security = "max-age=31536000; includeSubdomains"
cross-origin-opener-policy = "same-origin"
x-keystone-correlationid = ......
x-content-type-options = "nosniff"
Vary = "accept-language"
x-frame-options = "SAMEORIGIN"
}
{
applicationIdentifier = ......;
auxiliaryCapabilities = {
};
cardType = 4;
deviceProvisioningDataExpected = 1;
eligibilityStatus = 0;
identifier = ......;
learnMoreURL = "https://www.apple.com/ae/apple-pay/banks/ae/en-ae.html";
nonce = ......;
paymentApplications = (
{
appletTypeIdentifier = Argon;
paymentType = Credit;
}
);
region = "paymentpass.com.apple";
sanitizedPrimaryAccountNumber = 7008;
sanitizedPrimaryAccountPrefix = "";
}
We have an Apple Pay account and have successfully created and verified the payment processing certificate in our Apple Developer account.
When initiating an Apple Pay payment, the Apple session is created successfully with the correct data return from api , but it is not accepted with the error: “Payment not completed.”
The issue occurs even though the merchant validation step works without errors.
Our websites where this is happening are:
https://magicdeliver.com/
https://www.pulsarmodular.com/
Could you please help us identify the cause of the issue and guide us on resolving it?