Me and my team are implementing Apple Pay for our products and we've requested the PassKit Entitlements two months ago and until now we did not get any answer about it.
How long does it take to Apple disponibilize the PassKit Entitlements?
Apple Pay
RSS for tagProvide a fast, easy, and secure way for users to buy goods and services in your app or on your website using Apple Pay.
Posts under Apple Pay tag
166 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
We are integration with apple pay using amazon_flutter package, and we are receiving the following error:
[General] Failed to present in-app payment interface: Error Domain=PKPassKitErrorDomain Code=4 “No entitlement for merchant identifier: XXXXXX” UserInfo={NSLocalizedDescription=No entitlement for merchant identifier: XXXXXX}
2023-11-05 08:27:32.081341+0800 Runner[53987:3815356] [General] Connection to remote alert view service failed
Note: XXXXXX is our actual merchant identifier by Amazon payment service for the test environment.
I tried to screen record the Apple Pay payment process but after merchant validation the payment authorization option disappears (not asking for touch id or password).
I could find anything related to this issue in apple pay docs or forums.
Can someone help or anyone else faced the same issue do let me know.
https://applepaydemo.apple.com/payment-request-api
using this code can anyone help me to configure and code setup for apple pay web
I've implemented Apple Pay in our app and I'm wondering if there is a webhook or some form of callback that I can register with to ensure I always get the response.
If the customer closes Apple payment sheet before validation is complete, the error appears.
It's not a big deal, but we are improving our performance, so I need to fix this annoying log:
My code to validate merchant works and is this (I'm using braintree with apple pay):
// Validate merchant
session.onvalidatemerchant = async event => {
// Do request
const response = await getApplePay()
console.log(response)
if (response.success) {
instance.performValidation({
validationURL: event.validationURL,
displayName: 'Bucked Up'
}, (err, merchantSession) => {
if (err) {
setLoadingApple(false)
session.abort()
return
} else if(merchantSession) {
session.completeMerchantValidation(response.data)
setLoadingApple(false)
}
})
} else {
setLoadingApple(false)
session.abort()
}
}
Hi Team
I am trying to integrate apple pay into my system but session.completeMerchantValidation() is failing
Error
For generating merchant session I am using this url
https://apple-pay-gateway-cert.apple.com/paymentservices/paymentSession
In response i am getting merchant session but after passing that merchant session I am getting error as mentioned above in the image
I am stuck since 2 weeks but not getting any solution, your quick response will clear my blocker
Regards
Rutvij Doshi
【Event】
The Apple Pay certificate will expire.
Used to encrypt Apple Pay tokens.
We use stripe.
【Steps】
Download the .certSigningRequest (CSR file) from Stripe (on the Stripe dashboard).
Select the merchant ID to add to this certificate, click 'Create Certificate' in the Apple Pay Payment Processing Certificate section (on Apple).
When prompted to upload a certificate signing request, select the .certSigningRequest file you have downloaded and proceed to download.
Verify that the details of the certificate are correct, and download the certificate locally.
Upload the new certificate file on Stripe.
Go back to Apple’s Developer Center, select the MerchantID and activate the Apple Pay Payment Processing Certificate (Apple Pay settlement processing certificate) you created.
【Question】
I would like to understand the method for rolling back in case the update of the certificate unexpectedly fails. I am contemplating the following measures; would they be feasible?
Preserve the old certificate
Reactivate the old certificate once more
Additionally, do you have any other proposals?
Does anyone know what are the considerations / requirements of Apple Store to offering cash rewards to users for a free to play game (i.e., not a betting / gambling licensed app)?
Our game does not involve real money transactions. We have consulted legal experts who have confirmed that we do not fall under the category of a betting or gambling company, as users are not required to make any payments to enter our competitions.
The only requirement to enter to the cash rewarded competitions is to have an in-game asset that you get in the F2P competitions or buy this in-game asset in the store. The cash rewards we offer are distributed solely based on performance in the competitions.
I have troubles sometimes (with slow internet connections) when the customers clicks on my Buy Now button, i got the error "Must crerate a new ApplePaySession from a user gesture hanlder..."
I removed some logics to shipping to nt make this too long, but essentially my code is:
export default function ApplePayButton({setLoadingApple}) {
// Effects
React.useEffect(() => {
// listen click
const button = document.querySelector('apple-pay-button')
if(button){
button.addEventListener('click', startApplePaySession)
}
return () => {
button.removeEventListener('click', startApplePaySession)
}
}, [])
// Methods
const selectStep = step => {
// Check if step is available
if (state.steps.allowed >= step) {
dispatch({
type: 'UPDATE_STEPS',
data: {
...state.steps,
current: step
}
})
}
}
const startApplePaySession = () => {
const apple = window.buckedup.payment_extensions.find(extension => extension.code === 'apple_pay')
if (window.ApplePaySession && apple) {
setLoadingApple(true)
let clientToken
if (window.braintree_config) {
const {
token
} = window.braintree_config
clientToken = token
}
window.braintree.client.create({
authorization: clientToken
}, (clientErr, clientInstance) => {
if (clientErr) {
setLoadingApple(false)
console.error('Error creating client:', clientErr)
return
}
window.braintree.applePay.create({
client: clientInstance
}, (applePayErr, applePayInstance) => {
if (applePayErr) {
setLoadingApple(false)
console.error('Error creating applePayInstance:', applePayErr)
return
}
const amount = state.totals.amount_due.amount
const appleSession = window.ApplePaySession
// Build request object
const request = applePayInstance.createPaymentRequest({
'countryCode': 'US',
'currencyCode': 'USD',
'merchantCapabilities': [
'supports3DS',
'supportsDebit',
'supportsCredit'
],
'shippingMethods': [],
'shippingType': 'shipping',
'supportedNetworks': [
'visa',
'masterCard',
'amex',
'discover'
],
'requiredBillingContactFields': [
'postalAddress',
'name'
],
'requiredShippingContactFields': [
'postalAddress',
'name',
'phone',
'email'
],
'total': {
'label': 'Bucked Up',
'amount': amount,
'type': 'final'
}
})
// Define ApplePayPaymentRequest
const session = new appleSession(3, request)
// Validate merchant
session.onvalidatemerchant = async event => {
// Do request
const response = await getApplePay()
applePayInstance.performValidation({
validationURL: event.validationURL,
displayName: 'Bucked Up'
}, (err, merchantSession) => {
if (err) {
setLoadingApple(false)
return
}
session.completeMerchantValidation(response.data)
setLoadingApple(false)
})
}
// Validate payment method
session.onpaymentmethodselected = async event => {
// Update totals
const totals = await postApplePayment()
const update = {
'newTotal': {
'label': 'Bucked Up',
'amount': totals.data.amount_owed
}
}
session.completePaymentMethodSelection(update)
}
// Request to track shipping user data
session.onshippingcontactselected = async event => {
// Extract user available
const dataShipping = event.shippingContact
let body
// Do first request to checkout endpoint
const responseData = await shippingService(body)
if (responseData.success) {
// Get Shipping methods
const body = {
combined_shipments: true
}
const responseMethods = await getMethods(body)
if (responseMethods.success) {
const methods = responseMethods.data.shipments
// Do request to update totals
const responseTotals = await postApplePayment()
const update = {
'newTotal': {
'label': 'Bucked Up',
'amount': responseTotals.data.amount_owed
},
'newShippingMethods': mappedMethods
}
session.completeShippingContactSelection(update)
}
}
}
// Authorize purchase
session.onpaymentauthorized = async (event) => {
applePayInstance.tokenize({
token: event.payment.token
}, async (tokenizeErr, payload) => {
if (tokenizeErr) {
console.error('Error tokenizing Apple Pay:', tokenizeErr)
session.completePayment(appleSession.STATUS_FAILURE)
return
}
const nonce = payload.nonce
const billing = event.payment.billingContact
const shipping = event.payment.shippingContact
const body = {
shipping,
billing
}
const response = await patchApplePayment(body)
if (response.success) {
// Process payment
const bodyBraintree = {
apple_pay: true,
payment_method_nonce: nonce
}
const responseBraintree = await postBraintree(bodyBraintree)
if (responseBraintree.success) {
// Define ApplePayPaymentAuthorizationResult
const result = {
'status': appleSession.STATUS_SUCCESS
}
session.completePayment(result)
location.href = `${API_URL}checkout/thank-you`
}
}
})
}
session.oncancel = (event) => {
console.log(event, 'session cancel')
setLoadingApple(false)
selectStep(1)
}
session.begin()
}
)
})
}
}
return (
<apple-pay-button buttonstyle='black' locale='en' type='plane' />
)
}
How can I access Apple Pay sandbox transaction history?
I am a bit new to app development, spent the last month or so doing an app that handles orders and I integrated the use of firebase as well as notification and apple pay.
Now once the payment is done from the app, how do i know what the order is and where do i receive the money, Do i need to create mote handling for that or does it automatically come from apply pay ?
Any pointers on this would be very helpful
I am trying to add girocard in my wallet Sandbox from our app but I am getting an error like in screenshot. Even through PKAddPaymentPassRequestConfiguration is correct, I can't continue provisioning.
In that webpage, there is only information regarding credit cards. https://developer.apple.com/apple-pay/sandbox-testing/
Can you please help me regarding that issue?
guard let addPaymentPassRequestConfiguration = PKAddPaymentPassRequestConfiguration(
encryptionScheme: .ECC_V2
) else { return }
addPaymentPassRequestConfiguration.style = .payment
addPaymentPassRequestConfiguration.cardholderName = debitCard.cardholder
addPaymentPassRequestConfiguration.primaryAccountSuffix = String(girocard.cardNumber.suffix(4))
addPaymentPassRequestConfiguration.localizedDescription = girocard.cardType.cardDisplayName
addPaymentPassRequestConfiguration.paymentNetwork = .girocard
guard let addPaymentPassViewController = AddPaymentPassViewController(
requestConfiguration: addPaymentPassRequestConfiguration,
delegate: self
) else { return }
let addPaymentPassRequest = PKAddPaymentPassRequest()
addPaymentPassRequest.encryptedPassData = giroCardPaymentPassData.encryptedData
addPaymentPassRequest.activationData = giroCardPaymentPassData.activationData
addPaymentPassRequest.ephemeralPublicKey = giroCardPaymentPassData.ephemeralPublicKey
handler(addPaymentPassRequest)
Hi Apple released external payment for some new regions
https://developer.apple.com/documentation/storekit/external_purchase
but i don't fully undersant, can i use in one application for allowed region, external payment link, for all others Apple pay. Don't found clear explanations of that
During the period from 2023/10/16 19:07 to 21:03, when I called the validationURL, I received an error message stating "certificate has expired."
I verified that my merchant identity certificate is not set to expire until 2024.
Additionally, validation has been successful at other times. What could be the issue?
can I use the Apple Pay Sandbox in Jordan, to add test cards for VISA and MASTER cards?
Hi,
the certificate apple-pay-gateway.apple.com (https://developer.apple.com/documentation/apple_pay_on_the_web/setting_up_your_server) used for payments has expired :
Server Key and Certificate #1
Subject apple-pay-gateway.apple.com
Fingerprint SHA256: 19a1e3eeb0b13c3aefe03d4c02de6befb4200430ead97ee4150b3e0eaad89ec6
Pin SHA256: 38yRXBg6sU+IsJldFjKUj6TwTqkbVymXhyvMBWxMtV0=
Common names apple-pay-gateway.apple.com
Alternative names cn-apple-pay-gateway-tj-pod2.apple.com apple-pay-gateway-nc-pod1.apple.com apple-pay-gateway-nc-pod4.apple.com apple-pay-gateway-sh-pod2.apple.com cn-apple-pay-gateway-pr-pod3.apple.com apple-pay-gateway-pr-pod3.apple.com apple-pay-gateway-nc.apple.com apple-pay-gateway-tj-pod1.apple.com apple-pay-gateway-tj-pod2.apple.com apple-pay-gateway-pr-pod5.apple.com cn-apple-pay-gateway-nc-pod4.apple.com cn-apple-pay-gateway-pr-pod1.apple.com cn-apple-pay-gateway-sh-pod3.apple.com cn-apple-pay-gateway.apple.com cn-apple-pay-gateway-tj-pod3.apple.com apple-pay-gateway-nc-pod2.apple.com apple-pay-gateway-pr-pod1.apple.com apple-pay-gateway-pr-pod4.apple.com apple-pay-gateway-sh-pod3.apple.com cn-apple-pay-gateway-sh-pod1.apple.com cn-apple-pay-gateway-nc-pod3.apple.com cn-apple-pay-gateway-pr-pod2.apple.com apple-pay-gateway-nc-pod3.apple.com apple-pay-gateway-pr-pod.apple.com apple-pay-gateway-nc-pod5.apple.com apple-pay-gateway-tj-pod3.apple.com cn-apple-pay-gateway-pr-pod4.apple.com apple-pay-gateway-sh-pod1.apple.com cn-apple-pay-gateway-nc-pod5.apple.com apple-pay-gateway-pr-pod2.apple.com cn-apple-pay-gateway-sh-pod.apple.com cn-apple-pay-gateway-nc-pod1.apple.com apple-pay-gateway.apple.com cn-apple-pay-gateway-nc-pod2.apple.com cn-apple-pay-gateway-sh-pod2.apple.com apple-pay-gateway-pr.apple.com cn-apple-pay-gateway-tj-pod1.apple.com apple-pay-gateway-nc-pod.apple.com
Serial Number 0b2ffee60fc2a32e5046bf43075c1f89
Valid from Tue, 18 Jul 2023 10:53:06 UTC
Valid until Mon, 16 Oct 2023 11:03:06 UTC (expired 38 minutes and 13 seconds ago) EXPIRED
Trusted : No NOT TRUSTED
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?
As per Requesting an Apple Pay Payment Session, i have got a session from Apple's Server, i am passing the same in the completeMerchantValidation function, still the Payment Sheet keeps on processing. After timeout interval it gets closed automatically.
I am using Sandbox Account and Production Environment.
What could be the reason for this?
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?