There is coming vawe of SoftPOS class app, turning iPhone into regular payment terminal. so far Apple picks country by country, where the service is available. As for today limited number of regions, where Tap on Mobile is possible to use at all.
Beeing preparing for that vawe we are considering possibly integration scenario and found the following obstacle:
Originally it was possible to integrate as app to app, means Tap on Mobile to other apps, where both apps are installed separately on iPhone. But now Apple does not allowe to make integration as app to app, but only integration is possible by embedded libraries (special libraries are embedded in master app, and on the iPhone there is only one app, which covers also Tap on Mobile features).
1/ Do you know, what is the reason for such restriction to have only embedded libraries method to integrate (although originally it was possible to integrate as app to app, means Tap on Mobile to other app)?
2/ Do you think, Apple release again first integration as app to app, as they allowed originally?
Apple Pay
RSS for tagDiscuss how to integrate Apple Pay into your app for secure and convenient payments.
Post
Replies
Boosts
Views
Activity
Hello team ,
We have created a sandbox tester and added all the setting as per the guidelines but the sandbox tester account is blocked from adding the test card . All the test cards show as invalid card .
We are not able to able to add wallet from iCloud .
We are not able to sign into iTunes with the sandbox tester account .
Please help on how to resolve this .
Thanks in Advance
I have a Developer account with a Developer Role, although apparently without the stated ability to create my own Sandbox ID. So, our company's Administrator is trying to create one for me.
But each time he enters a new icloud.com address to create one, he gets the error,
"Your Apple ID or password was entered incorrectly."
(The example at the above link uses icloud.com, and that seems the natural place to do this. I'm assuming that since you can't actually create an icloud.com email without an Apple ID, that this sandbox creation process should be ok with the email not existing yet.)
Hi,
We are integrating with Apple Pay via Stripe. Payment works as expected and is shown as successful in the Stripe dashboard. Our Frontend and Backend have verified the payment and decided it is successful as well. But the Apple Pay UI shows "Payment not completed". Any tips on how to troubleshoot this please?
best,
Chandru
I want to integrate an apple pay account on the website, but on the point where I am validating merchant that return "false" responses . I already followed the documentation and tried many times but still did not resolve it. Please help me to resolve this issue. so that i can integrate apple pay for heartland.
here i mentioned my block of code where i am verifying merchant, please help to fix this.
server side code: (PHP):
$merchantSession = fetchAppleMerchantSession($validationURL);
echo json_encode($merchantSession);
function fetchAppleMerchantSession($validationUrl){
$cert_url = base_path('cert/merchant.pem');
$cert_key = base_path('cert/merchant.key');
$data = [
'merchantIdentifier' => 'domain.com',
'domainName' => 'domain.com',
'displayName' => 'Disp Name',
'initiative' => 'web',
'initiativeContext' => 'domain.com'
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $validationUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_CERTINFO, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt($ch, CURLOPT_SSLCERT, $cert_url);
curl_setopt($ch, CURLOPT_SSLKEY, $cert_key);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);
curl_close($ch);
$result = json_encode($res);
return ['data' => $result, 'status' => false];
}
client side code (JS):
// Create Apple Pay session within the user gesture handler
const session = new ApplePaySession(6, paymentRequest);
// Handle merchant validation
session.onvalidatemerchant = (event) => {
console.log("event", {event, session});
const validationURL = event.validationURL;
fetch('gp_applepay_validate.php', {
// Replace with your server-side validation endpoint
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Headers': "*"
},
body: JSON.stringify({
validationURL
}),
})
.then((response) => {
console.log("response.json()", response);
return response.json();
})
.then((data) => {
console.log("datappp", data);
if (data.status) {
event.completeMerchantValidation(data.data);
} else {
console.error('Merchant validation failed:', data.data);
session.abort();
alert('Payment failed: ' + data.data); // Improve error message
}
})
.catch((error) => {
console.error('Error during merchant validation:', error);
session.abort();
alert('An error occurred during payment. Please try again later.'); // Generic error message for user
});
};
does anyone have an example of the decrypted payload for an interac payment would look like? Couldnt find an example within the apple documentation
We are getting this error when processing our registration.
Payment Services Exception Domain check failed with the following errors. No domains were registered.\nDomain verification failed for pspId=1A014B2EC09DB380EE1D51FE4D116C801F62F29D74F2D93269FE554CA2E34656 domain=patient.moolah.cc url=/.well-known/apple-developer-merchantid-domain-association errorMessage=com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 4559 path $", "statusCode": "400"}
Team,
When I try using Apple pay for Japan, we are getting Payment Not Completed error for a merchant with Japanese character as the displayName at completeMerchantValidation.
The same works well if the merchant has name in English.
log from com.apple.passkit as explained in Apple Pay on the Web Debugging Guide
2024-04-30 12:12:21.441231+0530 0xb6bd16 Default 0x0 55547 0 com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitCore) [com.apple.passkit:Payment] Received <private> status: PKPaymentAuthorizationStatusSuccess
2024-04-30 12:12:21.441336+0530 0xb6bd16 Default 0x0 55547 0 com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitCore) [com.apple.passkit:Payment] Evaluating merchant session using PROD trust policy.
2024-04-30 12:12:21.448371+0530 0xb6bd16 Default 0x0 55547 0 com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitCore) [com.apple.passkit:Payment] State machine change state from PKPaymentAuthorizationStateClientCallback to PKPaymentAuthorizationStatePrepareTransactionDetails with param: <private>
2024-04-30 12:12:21.448393+0530 0xb6bd16 Default 0x0 55547 0 com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitMacHelper) [com.apple.passkit:PaymentUI] State change: PKPaymentAuthorizationStatePrepareTransactionDetails
2024-04-30 12:12:21.448444+0530 0xb6bd16 Error 0x0 55547 0 com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitMacHelper) [com.apple.passkit:PaymentUI] State change not implemented: PKPaymentAuthorizationStatePrepareTransactionDetails
2024-04-30 12:12:21.450878+0530 0xb6bd16 Default 0x0 55547 0 com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitCore) [com.apple.passkit:Payment] Performing request:
POST <private>
{
7 <private> fields
}
500 bytes
2024-04-30 12:12:22.642216+0530 0xbaa237 Default 0x0 55547 0 com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitCore) [com.apple.passkit:Payment] Task Completed: <private>
2024-04-30 12:12:22.642348+0530 0xbaa237 Default 0x0 55547 0 com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitCore) [com.apple.passkit:Payment] Response:
<private> 400 Time profile: 1.19145 seconds
{
6 <private> fields
}
232 bytes
2024-04-30 12:12:22.642571+0530 0xb6bd16 Default 0x0 55547 0 com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitCore) [com.apple.passkit:Payment] State machine change state from PKPaymentAuthorizationStatePrepareTransactionDetails to PKPaymentAuthorizationStateFatalError with param: <private>
2024-04-30 12:12:22.642617+0530 0xb6bd16 Default 0x0 55547 0 com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitMacHelper) [com.apple.passkit:PaymentUI] State change: PKPaymentAuthorizationStateFatalError
2024-04-30 12:12:22.642757+0530 0xb6bd16 Error 0x0 55547 0 com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitMacHelper) [com.apple.passkit:PaymentUI] Payment failed with fatal error <private>
2024-04-30 12:12:22.643288+0530 0xb6bd16 Default 0x0 55547 0 com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitCore) [com.apple.passkit:Analytics] subject: inApp event: <private>
2024-04-30 12:12:22.659154+0530 0xb6bd16 Default 0x0 55547 0 com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitMacHelper) [com.apple.passkit:PaymentUI] glyphView - revealedErrorAction()
2024-04-30 12:12:24.633308+0530 0xb6bad7 Default 0x0 55529 0 Safari: (PassKitMacHelperTemp) [com.apple.passkit:Payment] Invalidate extension <private> identifier <private>
2024-04-30 12:12:24.653014+0530 0xb6bd16 Info 0x0 55547 0 com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitCore) [com.apple.passkit:Connections] PKInAppPaymentService:0x12bf1b660 (0x1290e2a80): Tearing down existing connection
2024-04-30 12:12:24.653173+0530 0xbaaa12 Info 0x0 68603 0 passd: [com.apple.passkit:Connections] PDXPCServiceListener 2 (0x127705150:55547): connection invalidated
2024-04-30 12:12:24.654891+0530 0xb6bd16 Default 0x0 55547 0 com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitCore) [com.apple.passkit:Analytics] subject: inApp event: <private>
As we can see, com.apple.PassKit.PaymentAuthorizationUIExtension: (PassKitMacHelper) [com.apple.passkit:PaymentUI] Payment failed with fatal error <private>, how do we debug this further?
Is it possible to use the deep link for the payment? As if I want to pay. I just click on the payment button and it will kick me out from my existing app and run the payment solution app like Paytm, GPay, PhonePe, etc and the user will make the payment and redirect to their previous app and get the payment status
Hi guys,
I'm working on Apple Pay integrating it into web, but I'm having a problem the payment sheet is not showing on safari browser and iPhone devices (the apple pay button is showing but not clickable and no error logs) but it showing on iPad devices (the payment sheet is showing after the user clicks on the button). Is there anyone same as issue like this?
Thank you for any help.
Hello everyone!
In our application, we have login via phone number (with an SMS code as a password) and the ability to add a bank card to Apple Wallet.
When logging in via phone number, upon receiving the SMS code, it automatically suggests filling in the input field. However, the field itself is not of type .oneTimePassword, and the SMS does not contain @domain, #code at the end (please look at the screenshot).
So, when adding a card to Apple Wallet, PKAddPaymentPassViewController is launched, where entering the code from the SMS is also required to activate the card. However, no autocomplete prompt for the SMS password appears when displaying this field.
Does anyone have information on why this is happening and how it can be implemented?
We couldn't find a descriptive reply for the following and we wanted to get additional feedback.
We've received a notification about using ApplePayRecurringPaymentRequest in Apple Pay JavaScript for recurring, installment and unscheduled payments.
On the page (https://developer.apple.com/documentation/apple_pay_on_the_web/applepayrecurringpaymentrequest) we found a new object (see whole object below) and there are some questions about using and filling the parameters. I hope you will help us for making understanding.
The ApplePayRecurringPaymentRequest should be sent only in initial operation?
A phrase "required" is meant the parameter is mandatory?
Where can we take the lenth for each field?
Parameter regularBilling is applied for recurring, installment and unscheduled payments?
Parameter trialBilling is applied only for recurring payments?
If we sent the regularBilling or trialBilling Apple Pay will authorize a payment automatically without merchant's actions?
In which cases do we have to fill ApplePayLineItemType with value “pending”?
Parameter amount is whole sum of all payments or current only?
Parameter paymentTiming with value:
9.1 "immediate" - when does payment occur when the transaction is complete and sequent payments will occur only after merchant's actions?
9.2. "recurring" - what the different with "immediate"?
9.3. "deferred" - who and how will provide these payments in the future?
9.4. "automaticReload" - when should we use this value? (in description it's not clear)
If merchant can't provide recurringPaymentStartDate and recurringPaymentEndDate can we leave them blank or not send?
If merchant can't provide recurringPaymentIntervalCount can we leave them blank or not send?
Could you describe the usecase with using deferredPaymentDate?
Could you describe the usecase with using automaticReloadPaymentThresholdAmount?
Is billingAgreement mandatory parameter?
Can billingAgreement contain URL on agreement?
Is managementURL mandatory parameter?
What actions can user make on page via managementURL? And which cases are mandatory?
Is tokenNotificationURL mandatory parameter?
In which cases will we receive a request via tokenNotificationURL?
What kind of params specification should be in tokenNotificationURL (names, lenth, type, mandatory)?
dictionary ApplePayRecurringPaymentRequest
{required DOMString paymentDescription;
required ApplePayLineItem regularBilling;
dictionary ApplePayLineItem
Unknown macro: { ApplePayLineItemType type; DOMString label; DOMString amount; ApplePayPaymentTiming paymentTiming; Date recurringPaymentStartDate; ApplePayRecurringPaymentDateUnit recurringPaymentIntervalUnit; unsigned long recurringPaymentIntervalCount; Date recurringPaymentEndDate; Date deferredPaymentDate; DOMString automaticReloadPaymentThresholdAmount; };
ApplePayLineItem trialBilling;
dictionary ApplePayLineItem;
DOMString billingAgreement;
required DOMString managementURL;
DOMString tokenNotificationURL;};
no any exception message, the pay bottomsheet is disappear after i click 'pay btn'
my app is a flutter app, who can help me?
Hello everyone,
I have a app for Driver to pay in-store (fuel, garage, etc.) and would like to build a feature that can activate Apple Pay from my app so that Driver can use it to pay with POS terminal instead of double click the Home button. Is it possible?
My Merchant Domains' SSL certificate expires every 3 months, that means I need to verify Apple Pay Merchant Domains every 3 months at least.
Need API(s) to automate the verification process after my domain's SSL certificate updates:
API to download the apple-developer-merchantid-domain-association file to be uploaded to my domain.
API to verify the domain.
Received required entitlements from apple and as per the below link ios should allow us make third party app as default contactless app in EEA region.
But, Settings app only shows the toggle button to enable/disable Contactless capability. But, not an option to make an app as default contactless app.
com.apple.developer.nfc.hce.default-contactless-app | Apple Developer Documentation
Anyone has faced similar issue? Is above feature released or not, how can we confirm ?
We are in the process of integrating Apple Pay into our app and have some specific questions regarding the behavior of the payment sheet and token validity:
PKPaymentToken Validity: How long is the PKPaymentToken valid? Does it expire if not used within a certain timeframe?
Payment Sheet Behavior During Backend Processing: We are concerned about the potential for the Apple Pay payment sheet to time out while our backend is still processing the payment. How long will the payment sheet remain open before timing out? Is there a way to ensure it stays active until our processing is complete?
Thank you in advance for any insights you can provide!
Integrating Apple Pay for a Shopify Store via headless ecomm. Shopify on the backend/iOS + visionOS app on the front end. Shopify won't admit that they're at the wrong here BUT they are. The available CSR file from Shopify that you download is not using the encryption method Apple accepts, therefore you have to work some OpenSSL magic on your Mac terminal to create the correct encryption Apple Developer requires. Open Chat GPT 4.0 or later and type in the below, your issue is solved on that front.
"I'm trying to upload a certificate signing request file to create a merchant identity certificate for Apple Pay. I'm getting the following error message from Apple, "CSR algorithm/size incorrect. Expected: RSA(2048)". What does this mean and how do I fix the CSR file? I've uploaded the CSR file for reference."
My issue now is that Shopify gives me an error when attempting to upload the Merchant ID certificate from Apple Developer. Simply stating, "An error occurred while trying to save the certificate."
Anyone else get this far and run into this issue? Thanks
We're currently evaluating Apple Pay as a payment method on our site. For Amex US credit card payments, we charge a payment fee. For other credit cards, there is no such fee.
However, for Apple Pay it seems we cannot configure this. What we currently tried is to implement onpaymentmethodselected. However, only the card type is part of the event, not the card network.
Example code:
session.onpaymentmethodselected = event => {
/* event.paymentMethod only contains {type: "credit"} */
console.log('onpaymentmethodselected', event.paymentMethod);
/* event.paymentMethod.network is therefore undefined, if we could have here 'amex', 'mastercard' etc, we could implement the payment fee we currently have*/
console.log('onpaymentmethodselected', event.paymentMethod.network);
session.completePaymentMethodSelection({});
};
Is there a way to access the network in this callback?
Or is there another way to implement payment fees with certain networks used via Apple Pay?
We are having issues with the In App Provisioning process, in particular during the last phase of the process, when the activationData, encryptedPassData, ephemeralPublicKey are passed to the PKAddPaymentPassRequest.
We double-checked with our Issuer Host that activationData was required as plain string not encoded in Base64 in the previous version of PassKit, while now, as stated in the current Getting Started docs (9.5), all of the three objects are required in a Base64 format.
Currently, even after encoding the activationData in Base64, we are still receiving an error after calling handler’s method with an PKPassKitError with code equals 2 and a localizedDescription of: “The operation couldn’t be completed”.
To double check that there wasn't issues within our code, we also tried to add the same Card by manually add it through Apple Wallet application, but the same Alert error appear.
Thanks for your support.
Regards