Apple Pay

RSS for tag

Discuss how to integrate Apple Pay into your app for secure and convenient payments.

Apple Pay Documentation

Post

Replies

Boosts

Views

Activity

Getting Error when verifying merchant
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 }); };
2
0
735
May ’24
Apple Pay Registration Error
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"}
1
0
650
Apr ’24
Apple Pay Sandbox with Payment Not Completed
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?
3
0
782
Apr ’24
Apple Pay Sheet Not Showing on iPhones
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.
1
0
485
Apr ’24
Ios 18 dev beta 1 - applepay not working
Iphone 14 pro. After installing ios 18 dev beta 1, i cannot use anymore the applepay. When i put the iPhone near the pos, i double click the per button, i choose the credit card i want to use, but nothing happens. Tried to change credit card, remove card from. Wallet and re add, nothing worked. it is a known bug ? Anyone else ? Workaround? I'm living in Italy Fabrizio
9
6
2.5k
Jun ’24
Apple Pay - canMakePaymentsWithActiveCard
The documentation says that, when calling the method canMakePaymentsWithActiveCard, the method asynchronously contacts Apple pay servers. My question is, if I want to whitelist the Apple pay servers, should I be referring to this list? https://developer.apple.com/documentation/apple_pay_on_the_web/setting_up_your_server#3172426
1
0
382
Jun ’24
Potential Apple Pay Notification Delay in iOS 18 Developer Beta
Potential Apple Pay Notification Delay in iOS 18 Developer Beta Users are reporting a delay in receiving purchase notifications in Apple Wallet after using Apple Pay. Transactions are confirmed within the Wallet app, but the notification arrives hours later. As this issue is occurring on the iOS 18 developer beta, it's likely a software bug related to Apple Pay integration with Wallet. I have reported this to Feedback. Is anyone else having the same problem?
3
2
912
Jun ’24
Wallet Passes generate unreadable qrcode
Hi, I work in a ticketing company and we used Wallet passes. Everything works great but some venues report that some qrcodes are unreadable. I have one example. All information is present but the qrcode could not be read. We tested multiple readers. The information in the qrcode is only numeric, so ti is not an encoding issue. What can cause this issue ?
2
0
515
Jun ’24
Hide ApplePay button on non supporting devices
Hi, I'm adding ApplePay to our website. It works perfectly. However, I want to hide the ApplePay button on devices that do not have an Apple Wallet configured. I am using the following code to verify this as per ApplePay documentation. function ShowApplePayButton() { if (window.ApplePaySession) { if (ApplePaySession.canMakePayments()) { if (ApplePaySession.canMakePaymentsWithActiveCard('visa') || ApplePaySession.canMakePaymentsWithActiveCard('masterCard')) { return true; } } } return false; } This function always returns true from a Mac with no wallet configured. So the applePay button is visible on the Mac. When I click on the ApplePay button, there is no option to add or update the Wallet. This is my ApplePay sample code function onApplePay() { if (!ApplePaySession) { return; } var grandTotal = "10"; // Define ApplePayPaymentRequest const request = { countryCode: 'GB', currencyCode: 'GBP', merchantCapabilities: ['supports3DS'], supportedNetworks: ['masterCard', 'visa'], total: { label: 'Total', amount: grandTotal, type: 'final' }, requiredBillingContactFields: ["postalAddress", "name", "phone", "email"], requiredShippingContactFields: ["postalAddress", "name", "phone", "email"] }; // Create ApplePaySession const session = new ApplePaySession(3, request); session.onvalidatemerchant = async event => { // Call your own server to request a new merchant session. const merchantSession = await getAsync("/test/ValidateMerchant", "", "json") session.completeMerchantValidation(merchantSession); }; session.onpaymentmethodselected = event => { const update = { newTotal: { label: 'Total', amount: grandTotal, type: 'final' } } session.completePaymentMethodSelection(update); }; session.onshippingmethodselected = event => { const update = { newTotal: { label: 'Total', amount: grandTotal, type: 'final' } }; session.completeShippingMethodSelection(update); }; session.onshippingcontactselected = event => { }; session.onpaymentauthorized = event => { const result = { "status": ApplePaySession.STATUS_FAILURE }; const payment = event.payment; aj.post('/test/ProcessPayment', body, function (response) { if (response.approved) { session.completePayment(ApplePaySession.STATUS_SUCCESS); } else { session.completePayment(ApplePaySession.STATUS_FAILURE) } }, function (xhr, ajaxOptions, thrownError) { console.log(thrownError); }, true, 'json'); }; session.oncancel = event => { // Payment canceled by WebKit }; session.begin(); } Could you please suggest a workaround to resolve this issue?
2
1
507
Jun ’24
Wallet pass default localization rules
There must be some rules that determine which set of localized strings of an Apple Wallet pass (.pkpass) is used when the choice is not obvious. For instance, I made a pass with localization folders ko.lproj (Korean) pl.lproj (Polish) zh-Hans.lproj (Chinese). If any of these languages is in my iPhone's preferred languages (Settings... General... Language & Region), then it's easy: the first one on that list is used. But what if the list does not have any of them? When I try, it seems the Chinese localization is chosen by the Wallet app. Without the Chinese localization folder, it is Korean. If I also add ar.lproj (Arabic) then Arabic is chosen. I can't discern any system here. How does Wallet choose the default localization?
1
0
683
Jun ’24
Grace Period Not Working - App Store Server Notifications
I'm working in Apple's Sandbox environment to implement in-app purchase of an auto-renewable subscription. I followed the instructions at this link in order to Enable Billing Grace Period: https://developer.apple.com/help/app-store-connect/manage-subscriptions/enable-billing-grace-period-for-auto-renewable-subscriptions. However, when I receive an App Store Server Notification for when the user's billing method fails (DID_FAIL_TO_RENEW), it includes no information about the gracePeriodExpiresDate and we never get a GRACE_PERIOD_EXPIRED notification. Logs showing App Store Server Notification not reflecting Grace Period Enabled. I enabled grace period in App Store Connect like three weeks ago, so it's not a delay there. What can I do to test out Billing Grace Period? Is this just an Apple bug?
2
2
499
Jun ’24
Issues with Apple Pay Issuer integration
Hello, I am having issues with Apple Pay for issuers. I am not able to get passes from my Apple Watch. I am 100% sure that my Apple Watch is paired, and debug logs show that a remote pass library exists. The issue is that I have my card added on both my phone and watch, and I always get a blank passes array for my Apple Watch. This is the code I am using: let localPasses = PKPassLibrary().passes().compactMap { $0 as? PKSecureElementPass } let remotePasses = PKPassLibrary().remoteSecureElementPasses When the card is already added to my phone, when I tap the "Add to Apple Wallet" button on in-app provisioning, I still get a choice to add the card to either my phone or watch, which is not correct. I am getting the FPANID from the other pass in my wallet and setting it on PKAddPaymentPassRequestConfiguration.primaryAccountIdentifier, which according to the docs should be all that is required. Any help is appreciated! Thank you.
1
1
377
Jun ’24
Wallet extension unable to add card to watch without CVV
We are developing an app with the "Add card to Wallet" feature and facing an issue while adding a card to Apple Watch via the Wallet app with an app extension. Steps to reproduce: Open Wallet on iPhone Tap on “Add Card” Select card from Issuer app at "Add to Wallet" screen and complete provisioning Now 'Add card to Watch screen' is displayed on phone Continue provisioning on Watch Expected result: Card is added to Watch successfully without requiring CVV/CVC. Actual result: User is requested for CVV to add card to watch In-app-provisioning works fine from the app with iPhone and watch. Is it possible to skip entering the CVV step because our users don't know it?
2
0
1.4k
May ’23