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
947
Dec ’22
Merchant Validation Returns in cURL error 56
Trying to use Apple Pay with the Payment Request API, created a merchant validation with the following details: URL: https://apple-pay-gateway.apple.com/paymentservices/startSession Body: {"merchantIdentifier":"merchant.xxxxxxxxxxxxx","domainName":"labs.xxxxxxxx.com","displayName":"Mxxxxx"} The response is: cURL error 56: OpenSSL SSL_read: OpenSSL/1.1.1p: error:1409445C:SSL routines:ssl3_read_bytes:tlsv13 alert certificate required, errno 0 Any ideas why this could be?
1
0
503
Oct ’23
PKPass bundle (.pkpasses) not recognized
Hi, I created a bundle of passes using this doc: https://developer.apple.com/documentation/walletpasses/distributing_and_updating_a_pass and sent it as an attachment to an email. But when I try to open it with my iPhone (iOS 16), it doesn't suggest the add to wallet. When I send each pass individually, there is no problem, they are added to my wallet. Does anyone have any suggestions?
1
0
343
Oct ’23
How generate activationData for In-App Verification?
The Getting Started with Apple Pay documentation states that we should use this method to activate passes with In-App Verification. The main param is the activationData, which is generated by PNOs. The issue is that to generate the activationData, a nonce is required. How can we get the nonce on the In-App Verification context? The only way mentioned in the documentation to get the nonce is through PKAddPaymentPassViewControllerDelegate. But the PKAddPaymentPassViewController should be use only to In-App Provisioning, should not?
1
0
893
Aug ’23
PassKit Presentation Suppression on Apple Watch
Automatically presenting PassKit when approaching an NFC reader has been around for a while on iOS. Apple is already providing support to inhibit this behavior when using an app that has an approval-gated capability with the identifier com.apple.developer.passkit.pass-presentation-suppression. The automatic presentation feature has been added in watchOS 10 without the offering of a similar inhibiting method. This is degrading the experience for watchOS 10 users in use cases where the Apple Watch is expected to be close to an NFC-enabled device. I've noticed that the API is present in watchOS as well, although it's marked as unavailable. Calling requestAutomaticPassPresentationSuppressionWithResponseHandler: is always returning 0 (notSupported), and that might be due to the fact that including the capability breaks code signing. I've opened a FB, was wondering what is the best way to better communicate this need to Apple engineering and product teams. (FB13234179)
0
0
362
Oct ’23
Register merchant with apple-pay-gateway-cert
Hello everyone, I would like to register a merchant with a merchant identifier, calling https://apple-pay-gateway-cert.apple.com/paymentservices/registerMerchant, but I am getting a 401 error. The payment processing certificate and the merchant identity certificate (with name merchant.com.identity.us.test) have already been defined on the apple account account. I am executing this post request: curl -v --cert-type P12 --cert keystore.p12:passwordForMyKeystore -d '{"domainNames":["my-test-domain.com","my-live-test-domain.com"], "partnerMerchantName":"TESTMERCH1", "partnerInternalMerchantIdentifier":"test-merch-partner", "encryptTo":"merchant.com.identity.us.test"}' -H "Content-Type: application/json" -X POST https://apple-pay-gateway-cert.apple.com/paymentservices/registerMerchant The keystore.p12 I am using in the above post request, has been created with the identity certificate (merchant.com.identity.us.test) and with the private key created when generating the CSR. The response I am getting is this one: * ALPN: server accepted http/1.1 * Server certificate: * subject: CN=apple-pay-gateway-cert.apple.com; O=Apple Inc.; L=Cupertino; ST=California; C=US; serialNumber=C0806592; jurisdictionStateOrProvinceName=California; jurisdictionCountryName=US; businessCategory=Private Organization * start date: Jul 17 17:32:39 2023 GMT * expire date: Oct 15 17:42:39 2023 GMT * subjectAltName: host "apple-pay-gateway-cert.apple.com" matched cert's "apple-pay-gateway-cert.apple.com" * issuer: C=US; O=Apple Inc.; CN=Apple Public EV Server RSA CA 1 - G1 * SSL certificate verify ok. * using HTTP/1.1 > POST /paymentservices/registerMerchant HTTP/1.1 > Host: apple-pay-gateway-cert.apple.com > User-Agent: curl/8.1.2 > Accept: */* > Content-Type: application/json > Content-Length: 304 > < HTTP/1.1 401 Unauthorized < x-keystone-correlationid: cdcf1cc6-1f6f-4b92-bd6c-245a602bcaa3 < content-type: application/json < content-length: 87 < date: Thu, 05 Oct 2023 08:28:18 GMT < x-envoy-upstream-service-time: 14 < x-apay-service-response-details: via_upstream < { "statusMessage": "Payment Services Exception Unauthorized", "statusCode": "401" * Connection #0 to host apple-pay-gateway-cert.apple.com left intact } Have I done anything wrong in generating the Keystore? Kind regards, Antonio.
0
0
604
Oct ’23
Getting 401 when registering a merchant in sandbox
Hello, I am getting a 401 when calling https://apple-pay-gateway-cert.apple.com/paymentservices/registerMerchant to register a merchant and link it to a merchant identity. The merchant identity has been created, and both the merchant identity and the payment processing certificates have been created. I have then dowloaded the merchant identity certificate from Apple, and create a keystore with the private key used to create the CSR. The command I am issuing is the following: curl -v --cert-type P12 --cert keystore.p12:passwordForKeystore -d '{"domainNames":["test-domain.com","live-domain.com"], "partnerMerchantName":"merchant-partner-name", "partnerInternalMerchantIdentifier":"merchant-partner-internal-identifier", "encryptTo":"merchant.identity.certificate.name"}' -H "Content-Type: application/json" -X POST https://apple-pay-gateway-cert.apple.com/paymentservices/registerMerchant The response I am getting is the following: * SSL certificate verify ok. * using HTTP/1.1 > POST /paymentservices/registerMerchant HTTP/1.1 > Host: apple-pay-gateway-cert.apple.com > User-Agent: curl/8.1.2 > Accept: */* > Content-Type: application/json > Content-Length: 304 > < HTTP/1.1 401 Unauthorized < x-keystone-correlationid: cdcf1cc6-1f6f-4b92-bd6c-245a602bcaa3 < content-type: application/json < content-length: 87 < date: Thu, 05 Oct 2023 08:28:18 GMT < x-envoy-upstream-service-time: 14 < x-apay-service-response-details: via_upstream < { "statusMessage": "Payment Services Exception Unauthorized", "statusCode": "401" * Connection #0 to host apple-pay-gateway-cert.apple.com left intact } Has anyone had the same issue?
0
0
421
Oct ’23
The content of Oslo merchant validation is incorrect
Hi. I am integrating with the Apple Pay on my website. I am trying to perform a request via Postman to register a merchant - just testing if body of request is valid, if it actually registers a merchant etc. While I am doing so I get the following error: { "statusMessage": "Payment Services Exception Domain check failed with the following errors. No domains were registered.\nDomain verification failed for pspId=ENCRYPTED_MERCHANT_ID domain=xyz.com url=/.well-known/apple-developer-merchantid-domain-association errorMessage=The content of Oslo merchant validation is incorrect", "statusCode": "400" } Note that domain name and pspId were censored for security reason. I have no idea what does that error mean. Our domain is verified. We have domain verification file on the endpoint /.well-known/apple-developer-merchantid-domain-association errorMessage - otherwise our domain could not be registered. I have also checked it manually many times if it is there and everything looked fine. We have an active payment processing certificate. We have a merchant identity certificate. I use it on the serwer and on Postman for both apple-pay-gateway.apple.com and apple-pay-gateway-cert.apple.com. Requesta sent to Sandbox pass and return status 200. Request body: { "domainNames": ["xyz.com"], "encryptTo": "merchant.com.our.identifier", "partnerInternalMerchantIdentifier": "xyz25", "partnerMerchantName": "Some name" } Data is replaced with placeholders. I am 100% sure that fields encryptTo and domainNames are valid. Thank you in advance for any help.
1
0
562
Sep ’23
I want to integrate ApplePay in our Angular application.
I want to implement ApplePay on Angular. There are two ways to implement it (JS API and Payment Request API) and I would like to use the API method as I want to do as much as processing in server side. By looking at the following page, it's hard to understand the difference between JS API and Payment Request API. https://applepaydemo.apple.com/ Surprisingly I can't find any example code for Angular to use ApplePay. I can't believe no one has used ApplePay on Angular before. May be there is another/better way to do it? In Angular it's even tricky to get the window instance. I have tried the solutions in this question and managed to inject window instance using a service provider. I can display the ApplePay button on appropriate devices but I am getting the following error when calling the ApplePaySession object. Apparenlty the injected window is not the top level one.
1
0
1.3k
Aug ’23
Card provisioning issue on Apple wallet extension App
Hi Team, I am facing issue in Card provisioning on Apple wallet extension App on last step while attempts to provision the card using the provided PKAddPaymentPassRequest. Please help on this. Failed to get LSApplicationRecord for <RBSLaunchRequest| xpcservice<————([application<com.apple.Passbook>:**])>; "Launching extension ———————————————— for host **> with error Error Domain=NSOSStatusErrorDomain Code=-10814 "(null)" UserInfo={_LSLine=1569, _LSFunction=runEvaluator}
2
0
680
Sep ’23
Apple pay is not available for this website Error
I'm getting "Apple pay is not available for this website" error on SB after the onpaymentmethodselected event (not getting error onvalidatemerchant event) and the onPaymentAuthorised doesn't get hit at all. Here's my session data { "epochTimestamp":1652440219969, "expiresAt":1652443819969, "merchantSessionIdentifier":"SSH37EBB5A957294F0FBBD4F9C496317E1E_916523AAED1343F5BC5815E12BEE9250AFFDC1A17C46B0DE5A943F0F94927C24", "nonce":"51b5b6b1", "merchantIdentifier":"1B0FD6FCF62FBDA91A08BA2A18F4283AC1FFF6B69FC191B9F886482370BFC729", "domainName":"d176lcemp34qxj.cloudfront.net", "displayName":"Shamim", "signature":"308006092a864886f70d010702a0803080020101310f300d06096086480165030402010500308006092a864886f70d0107010000a080308203e43082038ba003020102020859d8a1bcaaf4e3cd300a06082a8648ce3d040302307a312e302c06035504030c254170706c65204170706c69636174696f6e20496e746567726174696f6e204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b3009060355040613025553301e170d3231303432303139333730305a170d3236303431393139333635395a30623128302606035504030c1f6563632d736d702d62726f6b65722d7369676e5f5543342d53414e44424f5831143012060355040b0c0b694f532053797374656d7331133011060355040a0c0a4170706c6520496e632e310b30090603550406130255533059301306072a8648ce3d020106082a8648ce3d030107034200048230fdabc39cf75e202c50d99b4512e637e2a901dd6cb3e0b1cd4b526798f8cf4ebde81a25a8c21e4c33ddce8e2a96c2f6afa1930345c4e87a4426ce951b1295a38202113082020d300c0603551d130101ff04023000301f0603551d2304183016801423f249c44f93e4ef27e6c4f6286c3fa2bbfd2e4b304506082b0601050507010104393037303506082b060105050730018629687474703a2f2f6f6373702e6170706c652e636f6d2f6f63737030342d6170706c65616963613330323082011d0603551d2004820114308201103082010c06092a864886f7636405013081fe3081c306082b060105050702023081b60c81b352656c69616e6365206f6e207468697320636572746966696361746520627920616e7920706172747920617373756d657320616363657074616e6365206f6620746865207468656e206170706c696361626c65207374616e64617264207465726d7320616e6420636f6e646974696f6e73206f66207573652c20636572746966696361746520706f6c69637920616e642063657274696669636174696f6e2070726163746963652073746174656d656e74732e303606082b06010505070201162a687474703a2f2f7777772e6170706c652e636f6d2f6365727469666963617465617574686f726974792f30340603551d1f042d302b3029a027a0258623687474703a2f2f63726c2e6170706c652e636f6d2f6170706c6561696361332e63726c301d0603551d0e041604140224300b9aeeed463197a4a65a299e4271821c45300e0603551d0f0101ff040403020780300f06092a864886f76364061d04020500300a06082a8648ce3d0403020347003044022074a1b324db4249430dd3274c5074c4808d9a1f480e3a85c5c1362566325fbca3022069369053abf50b5a52f9f6004dc58aad6c50a7d608683790e0a73ad01e4ad981308202ee30820275a0030201020208496d2fbf3a98da97300a06082a8648ce3d0403023067311b301906035504030c124170706c6520526f6f74204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b3009060355040613025553301e170d3134303530363233343633305a170d3239303530363233343633305a307a312e302c06035504030c254170706c65204170706c69636174696f6e20496e746567726174696f6e204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b30090603550406130255533059301306072a8648ce3d020106082a8648ce3d03010703420004f017118419d76485d51a5e25810776e880a2efde7bae4de08dfc4b93e13356d5665b35ae22d097760d224e7bba08fd7617ce88cb76bb6670bec8e82984ff5445a381f73081f4304606082b06010505070101043a3038303606082b06010505073001862a687474703a2f2f6f6373702e6170706c652e636f6d2f6f63737030342d6170706c65726f6f7463616733301d0603551d0e0416041423f249c44f93e4ef27e6c4f6286c3fa2bbfd2e4b300f0603551d130101ff040530030101ff301f0603551d23041830168014bbb0dea15833889aa48a99debebdebafdacb24ab30370603551d1f0430302e302ca02aa0288626687474703a2f2f63726c2e6170706c652e636f6d2f6170706c65726f6f74636167332e63726c300e0603551d0f0101ff0404030201063010060a2a864886f7636406020e04020500300a06082a8648ce3d040302036700306402303acf7283511699b186fb35c356ca62bff417edd90f754da28ebef19c815e42b789f898f79b599f98d5410d8f9de9c2fe0230322dd54421b0a305776c5df3383b9067fd177c2c216d964fc6726982126f54f87a7d1b99cb9b0989216106990f09921d00003182018d30820189020101308186307a312e302c06035504030c254170706c65204170706c69636174696f6e20496e746567726174696f6e204341202d20473331263024060355040b0c1d4170706c652043657274696669636174696f6e20417574686f7269747931133011060355040a0c0a4170706c6520496e632e310b3009060355040613025553020859d8a1bcaaf4e3cd300d06096086480165030402010500a08195301806092a864886f70d010903310b06092a864886f70d010701301c06092a864886f70d010905310f170d3232303531333131313031395a302a06092a864886f70d010934311d301b300d06096086480165030402010500a10a06082a8648ce3d040302302f06092a864886f70d01090431220420463e324ef2a67be4caad2196e90cd77e4a215ee2e2dee5ebb37bc5f18d4f0e76300a06082a8648ce3d04030204483046022100b1aef11ea8f5940eef195c13d0879528ff6ddd59a671aaede8bdb0a4a0aafc290221009257a1f32bfea292d8cd819682343d840b75a1d332c3154c33b701a3b8c0166b000000000000", "operationalAnalyticsIdentifier":"Shamim:1B0FD6FCF62FBDA91A08BA2A18F4283AC1FFF6B69FC191B9F886482370BFC729", "retries":0, "pspId":"1D867D2918895F195CF99A0BCCA8B3E63C0AB3FC997F254501617482BBCF21F9" } and this is the url that i'm testing with https://d176lcemp34qxj.cloudfront.net/MerchantSiteSB.html Can somebody please assist to find the issue? or how should i get more details on the error?
6
0
2.0k
May ’22
Time to get NFC Apple Wallet Cert
HiHow long does it take to get an NFC Certificate from Apple? So that we can delivery NFC Enabled Loyalty Passes.We registered at the following address but haven't received any communication for over 2 weeks.https://developer.apple.com/contact/passkit/We are developing solutions for our clients and need to test the technology.We use different PassTypeIDs for each of our Customers so it's likely we will need a different NFC certificate for each of our customers.How do we get NFC Certificates in bulk so that we can deliver NFC Loyalty Programmes to our Customers?Thanks
11
0
9.3k
Nov ’17
applePay Acceptable Use - Currency Sale - Apple Approval
Has anyone had experience of selling foreign currency using Apple Pay? If so, what steps did you complete to get Apple Approval? The Acceptable use guidelines state "You may not incorporate Apple Pay into a website that: ... Involves the purchase or transfer of currency (including cryptocurrencies) unless approved by Apple" I would like to provide Apple Pay as a payment option on website and app's that sell currency to customers but can't find any guidance of how to get Apple approval.
0
0
306
Sep ’23
Apple Wallet Pass Creation
I'm trying to build my first Apple Wallet Pass and I've been following the tutorial here: https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/PassKit_PG/YourFirst.html I get to this point but it fails: To sign and compress the pass, use the signpass tool to sign the pass package. In Terminal, run the following commands: cd ~/Documents ./signpass -p Lollipop.pass These commands create a signed and compressed pass named Lollipop.pkpass in the Documents folder. If the signpass command fails, make sure you are using your correct pass type identifier and check that the pass.json file contains valid JSON. Here is the error I get from Terminal: 2021-10-21 10:44:11.678 signpass[1461:45126] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'data parameter is nil' *** First throw call stack: ( 0   CoreFoundation                      0x000000019194f838 __exceptionPreprocess + 240 1   libobjc.A.dylib                     0x00000001916790a8 objc_exception_throw + 60 2   Foundation                          0x00000001926962ec -[_NSJSONReader init] + 0 3   signpass                            0x00000001000fe044 +[PassSigner passTypeIdentifierForPassAtURL:] + 124 4   signpass                            0x00000001000fe4d8 +[PassSigner signPassWithURL:certSuffix:outputURL:zip:] + 1124 5   signpass                            0x00000001000fdc9c main + 864 6   libdyld.dylib                       0x00000001917f1430 start + 4 ) libc++abi: terminating with uncaught exception of type NSException zsh: abort      ./signpass -p Lollipop.pass Any help would be appreciate as I would love to create a Wallet Pass for my customers, but can't seem to get past this error. Thank you, Darren
4
1
1.5k
Oct ’21