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

Apple Pay/NMI - Recurring Charges
Hi, I am currently integrating Apple Pay into a subscription web app. Our payment processor is NMI. Everything is working for individual charges. However, I am unable to get recurring payments to work. I tried to re-charge the initial token but NMI returns "DO NOT HONOR". How do I get access to a rechargeable token? The .onpaymentmethodselected event listener is only returning PaymentMethod: {type: "Credit"}. No token there. I tried to utilize tokenNotificationURL but it seems like the webhook is never being triggered. I setup a custom endpoint on my node.js server and I utilzed Ngrok to tunnel to my localhost. I also tried webhook.site but none of these solutions received anything from apple pay. I also changed the recurring payment interval to "minute" to test if the token would become chargeable again after 60 seconds - which didn't work either. How do I get access to a token that I can re-charge on a monthly basis?
1
0
936
Dec ’22
Issuer Extension - Apple Wallet
I am working on Issuer Extension using which user can add debit/ credit card through wallet directly. This is Extension based (Non and UI Extension. I am nearly implemented this however have doubts about PKIssuerProvisioningExtensionHandler methods which are below open func status(completion: @escaping (PKIssuerProvisioningExtensionStatus) -> Void)  open func passEntries(completion: @escaping ([PKIssuerProvisioningExtensionPassEntry]) -> Void) open func generateAddPaymentPassRequestForPassEntryWithIdentifier(_ identifier: String, configuration: PKAddPaymentPassRequestConfiguration, certificateChain certificates: [Data], nonce: Data, nonceSignature: Data, completionHandler completion: @escaping (PKAddPaymentPassRequest?) -> Void) My query is what is the significance of configuration in last callback. Can anyone please help with this. Thanks in advance
4
0
2.5k
Dec ’22
What is x-request-id in Apple Pay Merchant Token Management API
I'm currently implementing recurring donations for our Apple Pay on the Web integration and I'm trying to figure out what the x-request-id header is on the Get Details of a Merchant Token Event HTTP request. I'm not sure if that's an existing value I'm throwing in there or if it's a generic id I'm just putting in the header for Apple to use. the documentation in question is: Get Details of Merchant Token Event
1
0
631
Mar ’23
Hyperlink on Apple pass backfield does not work thru double tapping the power button
I'm encountering an issue with the Apple Pass Store card type backfield hyperlink not working when opened from double-clicking the power button. The value contains an HTML tag with a reference to our webpage. Everything works fine when we open it from the Wallet app, but the hyperlink doesn't seem to work when opened from the power button double-click. Has anyone else experienced this issue or have any suggestions for troubleshooting? Any help would be greatly appreciated. Thank you!
1
0
662
Apr ’23
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
977
May ’23
iOS Apple Pay in-App provisioning extension: `viewDidLoad` method not called after invoking `init`
I am coding for Apple Pay in-App provisioning extension, but there was a problem when Apple Wallet load authorization UI extension: The source code: The principal class .h file #import <UIKit/UIKit.h> NS_ASSUME_NONNULL_BEGIN @interface IssuerProvisioningViewController : UIViewController @end NS_ASSUME_NONNULL_END The principal class .m file #import "IssuerProvisioningViewController.h" #import <PassKit/PassKit.h> @interface IssuerProvisioningViewController ()<PKIssuerProvisioningExtensionAuthorizationProviding> @end @implementation IssuerProvisioningViewController @synthesize completionHandler; - (instancetype)init { NSLog(@"--- init"); self = [super init]; return self; } - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { NSLog(@"--- initWithNibName nibNameOrNil"); self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; return self; } - (void)viewDidLoad { NSLog(@"viewDidLoad"); // Do any additional setup after loading the view from its nib. } @end The Info.plist: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>NSExtension</key> <dict> <key>NSExtensionPointIdentifier</key> <string>com.apple.PassKit.issuer-provisioning.authorization</string> <key>NSExtensionPrincipalClass</key> <string>IssuerProvisioningViewController</string> </dict> </dict> The entitlement file: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.developer.payment-pass-provisioning</key> <true/> </dict> </plist> Environment: iOS 16.4.1 I found the method viewDidLoad was not be called after invoking method init. Thanks for reading and any advice.
5
0
2.0k
Jun ’23
Logs are still private even after installing Wallet Logging Profile
Hi, I'm currently developing Apple Pay In-App Provisioning and have encountered an issue with viewing logs necessary for debugging. I've followed the instructions listed in https://download.developer.apple.com/iOS/iOS_Logs/Wallet_Logging_Instructions.pdf and have installed the relevant wallet profile. After repeating the issue, and opening up the sysdiagnose file on my mac, the logs that i'm interested in is still hidden with private tags. The device I'm using to develop on is an iPhone 11, runnning on iOS 16.5. The version of Xcode is 14.3. I am also using a sandbox account on the device if that is relevant to the issue. Below are screenshots of the logs I'm interested in. Any help in solving this issue will be greatly appreciated.
3
1
1.1k
Jun ’23
iOS - Cash APP options API Error Code : 8447435879
Hi, We have a iOS app where users can purchase videos from others. Purchasing happens through In-app purchasing and our client get the money. So when the owner of the videos need to cashout the money he gets from the video selling, we need to implement an option for that. Currently we have a manual process for that. Our major mode of receiving payments is CashApp but when automating it with custom API it is giving error code : 8447435879 , 18447435879 Can Anyone tell me what exactly is this error code about? Note : we are synchronising the API with REST API
1
0
769
Jul ’23
Sample app shows error "ServiceUnavailable" when on real device
On simulator, everything works fine. But when I run on an iOS beta 3 device, the UI simply doesn't change. I just see the one button stay there. Logs show the below upon every click. I know there's the expected System UI with "Hold here to present" based on the simulator, but I can't see it on a real device. Is there some Terms & Conditions thing I should expect, maybe? Please advise. Thanks. . . . [for reference, the below are the error logs in Xcode] An error occurred while reading a mobile document: The operation couldn’t be completed. (ProximityReader.MobileDocumentReaderError error 6.) serviceUnavailable Could not create identity session due to: [ Error Domain=ProximityReader.IdentityReaderErrorInternal Code=15 UserInfo={NSDebugDescription=, code=} ]
4
0
1.1k
Jul ’23
We want to use Apple pay merchant id in multiple developer account?
We have an Apple developer account for website and we had create Apple Pay merchant id for that website, it's already live. Now we have developed iOS app on another Apple developer account. Now we want to use same website merchant id for iOS app. When we try to add website merchant id of another Apple developer account in Xcode it show following error. "A Merchant ID with Identifier merchant.com.example.app is not available. Please enter a different string"
0
1
297
Jul ’23
Announce the availability of Apple Pay In-App Provisioning
Hi! Can someone tell me please, over what period or how many times should the splash screens/interstitials pop up after login? Is it possible to limit the number of times these splash screens/interstitials are displayed for each card, or is it mandatory to display them all the time? In "Getting Started with Apple Pay In-App Provisioning" find only this phrase "Announce the availability of Apple Pay In-App Provisioning to users. Encourage new users to get the most from their card through the use of splash screens/interstitials or clear calls to action" Thanks!
0
0
355
Jul ’23
Problem in logo display of Apple Pay Later visual merchandising widget only on Safari browser
While implementing Apple Pay Later visual merchandising widget on my website it is displaying on every browser except safari without debug attribute. On safari it only works when debug attribute is set to be true, when we implemented custom css for display property value as inline-block it is showing none only in safari. Is there any other approach other than debug=true for safari, as we can not use debug property in production.
2
0
588
Jul ’23
onvaldiatemerchant doesn't work AT ALL
I have an persistent issue. When i makle a GET to the endpoint, this is my response: "epochTimestamp": 1689705258191, "expiresAt": 1689708858191, "merchantSessionIdentifier": "SSH8907CA4E29424A14969C5450CA01D99E_C23A0D3024FAB8B12CBB67660B4C1B48ABF1272EC8B61399E3A647290C8BE67A", "nonce": "6e127ad6", "merchantIdentifier": "B06C8CE272C72F8CC8C496721B5AB7904427AC91188AB4F711A54FEC31B5CDE5", "domainName": "ecommerce.bckd.co", "displayName": "Bucked Up", "signature": "308006092a864886f70d010702a0803080020101310d300b0609608648016503040201308006092a864886f70d0107010000a080308203e330820388a00302010202084c304149519d5436300a06082a8648ce3d040302307a312e302c06035504030c254170706c65204170706c69636174696f6e20496e746567726174696f6e204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b3009060355040613025553301e170d3139303531383031333235375a170d3234303531363031333235375a305f3125302306035504030c1c6563632d736d702d62726f6b65722d7369676e5f5543342d50524f4431143012060355040b0c0b694f532053797374656d7331133011060355040a0c0a4170706c6520496e632e310b30090603550406130255533059301306072a8648ce3d020106082a8648ce3d03010703420004c21577edebd6c7b2218f68dd7090a1218dc7b0bd6f2c283d846095d94af4a5411b83420ed811f3407e83331f1c54c3f7eb3220d6bad5d4eff49289893e7c0f13a38202113082020d300c0603551d130101ff04023000301f0603551d2304183016801423f249c44f93e4ef27e6c4f6286c3fa2bbfd2e4b304506082b0601050507010104393037303506082b060105050730018629687474703a2f2f6f6373702e6170706c652e636f6d2f6f63737030342d6170706c65616963613330323082011d0603551d2004820114308201103082010c06092a864886f7636405013081fe3081c306082b060105050702023081b60c81b352656c69616e6365206f6e207468697320636572746966696361746520627920616e7920706172747920617373756d657320616363657074616e6365206f6620746865207468656e206170706c696361626c65207374616e64617264207465726d7320616e6420636f6e646974696f6e73206f66207573652c20636572746966696361746520706f6c69637920616e642063657274696669636174696f6e2070726163746963652073746174656d656e74732e303606082b06010505070201162a687474703a2f2f7777772e6170706c652e636f6d2f6365727469666963617465617574686f726974792f30340603551d1f042d302b3029a027a0258623687474703a2f2f63726c2e6170706c652e636f6d2f6170706c6561696361332e63726c301d0603551d0e041604149457db6fd57481868989762f7e578507e79b5824300e0603551d0f0101ff040403020780300f06092a864886f76364061d04020500300a06082a8648ce3d0403020349003046022100be09571fe71e1e735b55e5afacb4c72feb445f30185222c7251002b61ebd6f55022100d18b350a5dd6dd6eb1746035b11eb2ce87cfa3e6af6cbd8380890dc82cddaa63308202ee30820275a0030201020208496d2fbf3a98da97300a06082a8648ce3d0403023067311b301906035504030c124170706c6520526f6f74204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b3009060355040613025553301e170d3134303530363233343633305a170d3239303530363233343633305a307a312e302c06035504030c254170706c65204170706c69636174696f6e20496e746567726174696f6e204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b30090603550406130255533059301306072a8648ce3d020106082a8648ce3d03010703420004f017118419d76485d51a5e25810776e880a2efde7bae4de08dfc4b93e13356d5665b35ae22d097760d224e7bba08fd7617ce88cb76bb6670bec8e82984ff5445a381f73081f4304606082b06010505070101043a3038303606082b06010505073001862a687474703a2f2f6f6373702e6170706c652e636f6d2f6f63737030342d6170706c65726f6f7463616733301d0603551d0e0416041423f249c44f93e4ef27e6c4f6286c3fa2bbfd2e4b300f0603551d130101ff040530030101ff301f0603551d23041830168014bbb0dea15833889aa48a99debebdebafdacb24ab30370603551d1f0430302e302ca02aa0288626687474703a2f2f63726c2e6170706c652e636f6d2f6170706c65726f6f74636167332e63726c300e0603551d0f0101ff0404030201063010060a2a864886f7636406020e04020500300a06082a8648ce3d040302036700306402303acf7283511699b186fb35c356ca62bff417edd90f754da28ebef19c815e42b789f898f79b599f98d5410d8f9de9c2fe0230322dd54421b0a305776c5df3383b9067fd177c2c216d964fc6726982126f54f87a7d1b99cb9b0989216106990f09921d00003182018830820184020101308186307a312e302c06035504030c254170706c65204170706c69636174696f6e20496e746567726174696f6e204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b300906035504061302555302084c304149519d5436300b0609608648016503040201a08193301806092a864886f70d010903310b06092a864886f70d010701301c06092a864886f70d010905310f170d3233303731383138333431385a302806092a864886f70d010934311b3019300b0609608648016503040201a10a06082a8648ce3d040302302f06092a864886f70d010904312204206380e03422682ab5e9cfa737daae5685eaff231e252f1905611ecd90fa7006df300a06082a8648ce3d0403020447304502210082f04e750bbb46b5870cec6055e17a235e7658b5f6e1101e22641614cb96e1d702205b156449d1e5573006889f18800f7fca2d5326cfeeb7cfb2ca59fb1e57eb25b2000000000000", "operationalAnalyticsIdentifier": "Bucked Up:B06C8CE272C72F8CC8C496721B5AB7904427AC91188AB4F711A54FEC31B5CDE5", "retries": 0, "pspId": "B06C8CE272C72F8CC8C496721B5AB7904427AC91188AB4F711A54FEC31B5CDE5" } and this is the that I used to display the payment sheets. But nothing happen, is like session.onvalidatemerchante doesn't make anything: export default function ApplePayButton() { // Constants const startApplePaySession = async () => { if (window.ApplePaySession) { const appleSession = window.ApplePaySession // Define ApplePayPaymentRequest const request = { 'countryCode': 'US', 'currencyCode': 'USD', 'merchantCapabilities': [ 'supports3DS' ], 'supportedNetworks': [ 'visa', 'masterCard', 'amex', 'discover' ], 'total': { 'label': 'Demo (Card is not charged)', 'type': 'final', 'amount': '2.00' // harcoded amount } } const session = new appleSession(6, request) session.onvalidatemerchant = async function(event) { try { const {data} = await getApplePay() session.completeMerchantValidation(data) } catch (error) { console.log(error) } } session.begin() } } return ( <button className='apple-pay-btn' id='apple-btn' onClick={startApplePaySession} > Button here </button> ) } Please what I making wrong!!!!
0
0
537
Jul ’23
Apple Pay Web Merchant Registration Authentication Requirements
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?
0
0
510
Jul ’23
Apple Pay: session.onvalidatemerchant is never called on desktop Safari (works perfectly on mobile)
I'm adding Apple Pay to my shopping cart web app for the first time. Everything is working perfectly on iPad and iPhone and for at least one MacBook user on my team - we've completed payments, start to finish. But for one user on a 2023 16-inch MacBook Pro (Ventura 13.0), pressing the Apple Pay button does not cause the pop-up to appear. I've added lots of logging statements in the button handler and in the various callback functions it registers. I'm creating a session, but that session's onvalidatemerchant callback is never called. I asked this user to test ApplePaySession.canMakePayments(), and it returns true. A simplified version of the click handler: function startApplePay(args) { const paymentRequest = createApplePaymentRequest(args); const session = new ApplePaySession(3, paymentRequest); console.log("Created apple pay session", session); // OK session.onvalidatemerchant = event => { console.log("onValidateMerchant callback invoked"); // FAILS // applePayInstance.performValidation(...) } session.onpaymentauthorized = event => {...} session.onshippingcontactselected = event => {...} session.oncancel = event => {...} session.begin(); console.log("Started apple pay session", session); // OK } There are a lot of logging statements present, that I've omitted here for simplicity, in this function and in each of the callback functions it defines. On my colleague's MacBook, I see the console logging statements that show successful session creation and that session.begin() was called. But onvalidatemerchant is never called; instead it calls oncancel immediately. Printing the ApplePayCancelEvent to the console, it shows that onvalidatemerchant is a function. It also shows a sessionError with { code: "unknown", info: {} }. Any way to gain more insight into why onCancel() was called? We're testing this in production with a production certificate. Everything is working fine on mobile devices (iPad & multiple iPhone users have tested), and we can complete payment start to finish. Another MacBook owner has also made payments successfully - it's just this one MacOS 13 user experiencing problems. This is similar to an issue from 7 years ago, but I haven't found an answer in that thread: https://developer.apple.com/forums/thread/51657
2
0
767
Jul ’23