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

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
519
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
697
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
505
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
387
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
Wallet Extension - "From apps on your iPhone" option not showing
I'm implementing Wallet Extension for adding credit card on wallet, I created both extension, UI and NonUI, but the "From apps on your iPhone" option never shows to me. My extensions have the same entitlements of main app, with the com.apple.developer.payment-pass-provisioning. My NonUI status function implementation: final class MBFApplePayNonUIExtensionHandler: PKIssuerProvisioningExtensionHandler { override func status(completion: @escaping (PKIssuerProvisioningExtensionStatus) -> Void) { let status = PKIssuerProvisioningExtensionStatus() status.requiresAuthentication = true status.passEntriesAvailable = true status.remotePassEntriesAvailable = true completion(status) } .... I tried this to: final class MBFApplePayNonUIExtensionHandler: PKIssuerProvisioningExtensionHandler { override func status(completion: @escaping (PKIssuerProvisioningExtensionStatus) -> Void) { let status = PKIssuerProvisioningExtensionStatus() status.requiresAuthentication = true completion(status) } .... Extensions .plists: NonUI: NSExtension NSExtensionPointIdentifier com.apple.PassKit.issuer-provisioning NSExtensionPrincipalClass MBFApplePayNonUIExtensionHandler UI: NSExtension NSExtensionMainStoryboard MBFApplePayUIExtension NSExtensionPointIdentifier com.apple.PassKit.issuer-provisioning.authorization What am I missing?
5
0
2.8k
Sep ’23
Backend integration
Hello, I started to integrate App Store Server Notifications and App Store Server API, both sandbox, on backend and I have encountered the following problems: App Store Server Notifications: After a payment is done on mobile, apple sends a notification to our backend which contains a JWT, the problem is that JWT seems to be incomplete and I can't decode it to see the details. App Store Server API: After a payment is done on mobile, mobile sends to our backend the transaction id, we use that id to make a request to App Store Server API in order to receive details about the transaction, but again the JWT received seems to be incomplete having at the end 3 dots. Any idea why both of them are incomplete?
0
0
287
May ’24
Card Change on HCE-based contactless payment
Hi, I am integrating the HCE-based API into our SDK. Ideal flow It is bit tricky to support card change (step 3 below) after field-detect/double click due to NFC action sheet. Ideally, the flow is: User double-click. App launch "Hold near Reader" NFC instruction (optional) User change card User tap device to POS reader payment succeed. Approach A If I follow the code snippet in CardSession, where it calls startEmulation after readerDetected, I could change card before that. However, the "Hold near Reader" NFC instruction is shown very late, during tap. User double-click App launch (optional)User change card User tap device to POS reader "Hold near Reader" NFC instruction payment succeed. Approach B If I call startEmulation after sessionStarted, I could show "Hold near Reader" NFC. However, I could not provide the optional capability to change card anymore. User double-click App launch "Hold near Reader" NFC instruction User tap device to POS reader payment succeed. Neither approach A or B provide optimal approach shown in Ideal flow. Is this expected from CardSession that there is no option to startEmulation without the action sheet? Is there a plan to improve startEmulation so that it could show "Hold near Reader" without the action sheet? Thank you.
1
0
763
May ’24
How to Setup For Apple Pay Later for testers testing my code?
Hello! For Apple Pay, I'd like to disable the option for a customer selecting Apple Pay Later (tab). In Swift, very easily modify the PKPaymentRequest with: if #available(iOS 17.0, *) { paymentRequest.applePayLaterAvailability = .unavailable(.itemIneligible) } However, how can this be setup to test that it works? Very easily add sandbox account, and test cards, but not so easy to enable Apple Pay Later, or documented so the end user (tester) can test it. Anyone know how to go about setting this up? Thanks!!
0
0
409
May ’24
Tap on Mobile app integration with other app on iOS
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?
0
0
457
May ’24
Apple Pay, domain verification automatic renewal not working
Hi everyone, We are integrating Apple Pay on the Web, and we're trying to get the automatic renewal of the domain verification working according to the documentation: https://developer.apple.com/documentation/apple_pay_on_the_web/maintaining_your_environment Initially the domain verification is successful, but then the automatic renewal does not work. We keep getting the emails with the subject "Your domain will expire soon.", but they only say "We were unable to automatically to reverify your domain." without any further details. We confirmed that the site's SSL certificate has already been renewed by the time Apple attempted the renewal of verification, the certs are renewed 30 days before their expiry (using Let's Encrypt). So according to the docs, at least the renewal attempts 15, and then 7 days before the expiry should be successful. One example domain is this one: https://www.kayak.com/.well-known/apple-developer-merchantid-domain-association.txt, but we have the same issue for all our other domains as well. Does anyone have suggestions how to troubleshoot this further? (I tried creating a support ticket, but they basically replied that they're non-technical, and just linked me to the documentation. I've seen others complaining about this too, but couldn't find a conclusive solution, so I thought I'd signal boost and create a fresh topic to see if there are any more recent findings about this problem.) Thanks! Regards, Mark
6
4
3.7k
Mar ’22
ios 17.4 - no option to make contactless app as default payment app in Setting for EEA region
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 ?
2
0
682
Apr ’24
How to create PASS_TYPE_ID Certificates?
So creating a IOS-DEVELOPMENT certificate is pretty straight forward... and I suspect some of the other types as well ... but when I try to create a PASS_TYPE_ID certificate it fails with some response messages... "STATUS" : "404" "code" : "NOT_FOUND" "title" : "The specified resource does not exist" "detail" : "There is no identifier with ID 'null' on this team" So it would appear it's expecting more attributes to be set in the payload that are specific to creating that type of certificate. Which of course makes sense. There has to be a way of assigning it to a Pass Type ID that you have created. (It would be nice if the API could at least list existing Pass IDs, or even create them - but I've not seen how yet). But for the life of me I can't find or figure out the syntax for this. Anyone have any luck?
1
0
732
Aug ’23
Autofill SMS code in PKAddPaymentPassViewController
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?
0
0
483
Apr ’24
ApplePay Recurring Payment Request
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;};
0
0
595
Apr ’24
apple-developer-merchantid-domain-association Error
Trying to get Apple Pay with PayPal to work in our Wordpress WooCommerce platform. We've done all of the registration, and have uploaded the apple-developer-merchantid-domain-association data file to .well-known but the file can not be read. It is 644 permission and we have removed the extension per Apple Support, but the link is still not readable and gives a 404 error. If I add a dat or txt extension, it is readable to a web browser, but Apple still doesn't see the file as it doesn't want the extension. I even tried an order with Apple Pay but it failed. PayPal is useless and just send us to Apple, and Apple doesn't seem to have much on it either. Searching the support files I only find 5 year old posts. Google Pay works without issue, *** do credit cards and PayPal. Just no Apple Pay. The instructions are pretty basic: Download and host live domain association file Host a domain association file for each high-level domain and subdomain that show the Apple Pay button. Download the domain association file for your live environment. Host the file on your live site for each domain and subdomain you want to register, at /.well-known/apple-developer-merchantid-domain-association. For example: https://example.com/.well-known/apple-developer-merchantid-domain-association https://subdomain.example.com/.well-known/apple-developer-merchantid-domain-association
1
0
1.4k
Jan ’24
Questions Regarding Apple Pay Integration in Our App
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!
0
0
396
Apr ’24