Hello,
I've recently created a merchant ID and added two domains to it. I placed the verification .txt files in the right place (under the .well-known dir) and both verified successfully and show as such in the merchant id setup page.
I am intermittently getting the following error:
{
"statusMessage": "Payment Services Exception merchantId=XXXXX not registered for domain=my.domain.com",
"statusCode": "400"
}
(merchantId and domain have been masked in the above error) -- What's odd is that this is intermittent -- It'll work fine, and then stop and start giving the above error, and then start working fine again, with no intervention from me.
Some context: This is a single server application, so it's not like we've got a server out of sync somewhere.
Thoughts?
Any thoughts?
Apple Pay on the Web
RSS for tagApple Pay on the Web allows you to accept Apple Pay on your website using JavaScript-based APIs.
Posts under Apple Pay on the Web tag
145 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
I am using a sandbox account, and I set United States in the region column (Settings>General>Language & Region>Region to US). I added test cards like (American Express and Visa) and the cards added successfully.
But I am trying to pay then I get an error like "Payment Not Completed".
Note: I am trying from India.
Please let me know what exactly i am doing mistake here
Following code i am using.
function onApplePayButtonClicked() {
if (!ApplePaySession) {
return;
}
// 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": "1.99"
}
};
// Create ApplePaySession
const session = new ApplePaySession(3, request);
session.onvalidatemerchant = event => {
// Call your own server to request a new merchant session.
var merchantSession = merchantValidation(event.validationURL);
session.completeMerchantValidation(merchantSession);
};
session.onpaymentmethodselected = event => {
// Define ApplePayPaymentMethodUpdate based on the selected payment method.
// No updates or errors are needed, pass an empty object.
const update = {};
session.completePaymentMethodSelection(update);
};
session.onshippingmethodselected = event => {
// Define ApplePayShippingMethodUpdate based on the selected shipping method.
// No updates or errors are needed, pass an empty object.
const update = {};
session.completeShippingMethodSelection(update);
};
session.onshippingcontactselected = event => {
// Define ApplePayShippingContactUpdate based on the selected shipping contact.
const update = {};
session.completeShippingContactSelection(update);
};
session.onpaymentauthorized = event => {
// Define ApplePayPaymentAuthorizationResult
const result = {
"status": ApplePaySession.STATUS_SUCCESS
};
session.completePayment(result);
};
session.oncouponcodechanged = event => {
// Define ApplePayCouponCodeUpdate
const newTotal = calculateNewTotal(event.couponCode);
const newLineItems = calculateNewLineItems(event.couponCode);
const newShippingMethods = calculateNewShippingMethods(event.couponCode);
const errors = calculateErrors(event.couponCode);
session.completeCouponCodeChange({
newTotal: newTotal,
newLineItems: newLineItems,
newShippingMethods: newShippingMethods,
errors: errors,
});
};
session.oncancel = event => {
// Payment canceled by WebKit
};
session.begin();
}
session.onvalidatemerchant = function(event) {
const validationURL = event.validationURL;
console.log("Validation URL:", validationURL);
document.getElementById('methodapplepay').value = "validate";
document.getElementById('validationURL').value = validationURL;
$.ajax({
url: 'ajax/processInternalDonate.php',
type: 'POST',
data: $("#payment_form").serialize(),
success: function(dataValidate) {
dataValidate = JSON.parse(dataValidate);
session.completeMerchantValidation(dataValidate);
},
error: function(xhr, status, error) {
console.error('Merchant validation failed:', error);
session.abort();
}
});
};
session.onpaymentauthorized = function(event) {
var payment = event.payment;
$.ajax({
url: 'ajax/processInternalDonate.php',
type: 'POST',
data: {pay_mode:"pay_mode",method:"process_payment",payment:JSON.stringify(payment)},
success: function(dataprocess) {
if (dataprocess.success) {
session.completePayment(ApplePaySession.STATUS_SUCCESS);
} else {
session.completePayment(ApplePaySession.STATUS_FAILURE);
}
},
error: function(xhr, status, error) {
console.error('Payment processing failed:', error);
session.completePayment(ApplePaySession.STATUS_FAILURE);
}
});
};
from this above two session methods for the first method I got the merchant validation response from the API calling from that method but for the session.onpaymentauthorized when the second API is calling then I got the message payment not processed on my apple pay popup upon autorisation from my phone so I want that you provide me the correct backend flow for this API calling so we get the amount charged and I also got the payment object from event.object on logging in my console.
Do Merchant initiated Authorizations work for MasterCard with ApplePay in the US?
Our payment provider let us know that we can not do pre-orders in the US using MasterCard with ApplePay , only VISA works. Is this true?
If yes, any specific reason behind it?
Hello everyone
Searching on the forums about the Mpan and the merchant Token Identifier I found there is no a good or clear way to get one of those, So I wonder if (without the risk to try it in production with a real payment) there is a way to test recurring payments by using an sandbox card or if the only solution is by on given from a bank or a card network for testing (but that solution is even more complex), it this last is the only way, what are the criteria to get the Mpan in the payment data? I know that the card network should support this feature is also a must, but how to know if the car network support Mpan? (is there a list?)
We are trying to retrieve merchant tokens from ApplePay. We used the javascript codes from Apple Pay demo site to request for a recurring payment from the frontend.
"recurringPaymentRequest": {
"paymentDescription": "A description of the recurring payment to display to the user in the payment sheet.",
"regularBilling": {
"label": "Recurring",
"amount": "4.99",
"paymentTiming": "recurring",
"recurringPaymentStartDate": "2023-08-11T11:20:32.369Z"
},
"trialBilling": {
"label": "7 Day Trial",
"amount": "0.00",
"paymentTiming": "recurring",
"recurringPaymentEndDate": "2023-08-11T11:20:32.369Z"
},
"billingAgreement": "A localized billing agreement displayed to the user in the payment sheet prior to the payment authorization.",
"managementURL": "https://applepaydemo.apple.com",
"tokenNotificationURL": "https://applepaydemo.apple.com"
}
Payment was successful, but merchantTokenIdentifier is not shown in the in decrypted ApplePay token, regardless of test card used. We tried Visa and MasterCard.
Hi,
I was implementing Apple pay button by checking active wallet and at least one cards active.
I am using applePayCapabilities as per DOCS but i am still getting the same type of response with apple pay wallet enabled and without apple pay wallet enabled on different devices as
Loading the Apple Pay SDK:
script.src = "https://applepay.cdn-apple.com/jsapi/1.latest/apple-pay-sdk.js";
script.crossOrigin = "anonymous";
document.head.appendChild(script);
script.onload = function() {
console.log("Apple Pay SDK loaded successfully");
// Initialize Apple Pay or perform actions that require the SDK here
};
script.onerror = function() {
console.error("Error loading Apple Pay SDK");
};
Calling applePayCapabilities method:
window.ApplePaySession.applePayCapabilities("merchant.com.example").then(r => console.log(r))
Output:
{paymentCredentialStatus: "paymentCredentialsAvailable"}
Image attachments of applePayCapabilities:
Devices Config Used:-
Chip - Apple M3 Pro
macOs - Sequoia 15.0.1
memory - 36 GB
Safari Version - 18.0.1
Good day,
I'm attempting to check whether Apple Pay is available using the ApplePay JS API. Prior to upgrading to Safari 18.0+, I was using window.ApplePaySession.canMakePayments to show/hide the Apple Pay option.
I've noticed with the new Safari version, the preferred method of checking the availability of Apple Pay is by using the applePayCapabilities method.
When logging and inspecting the window object in Safari 18.0.1, this method seems to be missing from the ApplePaySession object.
Additionally, my conditional code which is dependent on applePayCapabilities does not execute:
if (typeof window !== 'undefined' && window.ApplePaySession) {
// Safari version 17 and lower
if (window.ApplePaySession.canMakePayments) {
// set Apple Pay available
}
/**
* On Safari version 18 and higher, we must check whether a user has a card saved in their wallet.
* If this is the case, Apple Pay must be presented as the primary payment method. In our case,
* this means selecting Apple Pay as the default payment method.
*/
if (window.ApplePaySession.applePayCapabilities) {
const merchantIdentifier = 'xxx';
const promise = window.ApplePaySession.applePayCapabilities(
merchantIdentifier
);
promise.then(capabilities => {
switch (capabilities.paymentCredentialStatus) {
case ApplePayCapabilities.CREDENTIALS_AVAILABLE:
// set Apple Pay as available and default
break;
case ApplePayCapabilities.UNSUPPORTED:
// not available
break;
default:
// set Apple Pay as available only
}
});
}
}
I feel I'm missing something very simple here, help would be greatly appreciated!
Hi, I recently saw that ApplePay is supported on other browsers and also on computers other than Mac, but on my site I have ApplePay integrated and it doesn't work, do I have to do anything to have it activated on my portal?
I integrated it with Apple Pay API JS
I can't pay for my apple developer membership, I tried to reach apple support team and apple developer many times. Apple support says I need to contact developer team and after contacting developer team, I'am not getting any response.
Topic:
Developer Tools & Services
SubTopic:
Apple Developer Program
Tags:
Beta
Developer Tools
Apple Pay on the Web
I am currently testing Apple Pay integration on my sandbox environment and I am in need of test cards for failed cases such as insufficient balance. Does anyone have access to or know where I can find Apple Pay test cards specifically for scenarios where transactions fail due to reasons like insufficient balance? Any help or guidance on this matter would be greatly appreciated. Thank you.
调用 API 时,返回以下错误:Apple Pay 处理证书、Apple Pay 商家身份证书和商家域均已设置
{
“statusMessage”: “支付服务异常 merchantId=1A9569E9792DB13B9BEE22EDB30515DE75D512B91A2C86C54D4065AD1ECC712E 未经授权代表 merchantId=4D08091EACD9C0D2E25CB94895D1B0DAE73970D6A517EF2988D6D929D1336DA1 reason=4D08091EACD9C0D2E25CB94895D1B0DAE73970D6A517EF2988D6D929D1336DA1 不是 WWDR 的注册商家,也没有通过 Mass Enabling 获得适当授权。
“状态代码”: “417”
连接到主机的 #0 apple-pay-gateway.apple.com 完好无损
}
I am getting error while await applePayClient.PostAsJsonAsync(validationUrl, validationPayload)
I am testing it on local machine. Am I even can test this on local machine or not?
Error: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host..
validationUrl: https://apple-pay-gateway.apple.com/paymentservices/startSession
JS
C# code:
var applePayClientHandler = new HttpClientHandler
{
SslProtocols = System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls13
};
var applePayClient = new HttpClient(applePayClientHandler);
var merchantId = "merchant.com.xxxxxx.sandbox";
var _displayName = "Sandbox";
var domainName = "xxxxxx.co";
var validationUrl = request.ValidationURL;
var validationPayload = new
{
MerchantIdentifier = merchantId,
DisplayName = _displayName,
Initiative = "web",
InitiativeContext = domainName
};
try
{
var response = await applePayClient.PostAsJsonAsync(validationUrl, validationPayload);
var merchantSession = await response.Content.ReadAsStringAsync();
return merchantSession;
}
catch (HttpRequestException httpEx)
{
// Log detailed HTTP request/response information
Console.WriteLine($"HttpRequestException: {httpEx.Message}");
if (httpEx.InnerException != null)
{
Console.WriteLine($"InnerException: {httpEx.InnerException.Message}");
}
throw;
}
Topic:
App & System Services
SubTopic:
Apple Pay
Tags:
Apple Pay on the Web
Apple Pay
Tap to Pay on iPhone
Hi.
About to start integrating Apple Pay for the first time. Other gateways I've integrated have a limit from the initial authorisation, above which you can't capture payment. E.g. customer authorizes £100, but then adds items to their order taking the value to £120. Is there such a limit with Apple Pay? Is there a workaround without having to contact the customer again.
Jon
Hi,
I'm adding deferredPaymentRequest container to get MPan, but payment is now cancelled by Webkit, no other explanation
What is the next step to get mpan ?
Regards,
Louis
"deferredPaymentRequest": {
"deferredBilling": {
"label": "Deferred Payment",
"amount": "1.99",
"type": "final",
"paymentTiming": "deferred",
"deferredPaymentDate": "2024-06-1",
},
"managementURL": 'https://.../apmsim/pay/appleManagement',
"paymentDescription": "this is a paymentDescription",
}
Hello team ,
We have created a sandbox tester and added all the setting as per the guidelines but the sandbox tester account is blocked from adding the test card . All the test cards show as invalid card .
We are not able to able to add wallet from iCloud .
We are not able to sign into iTunes with the sandbox tester account .
Please help on how to resolve this .
Thanks in Advance
Hi,
We are integrating with Apple Pay via Stripe. Payment works as expected and is shown as successful in the Stripe dashboard. Our Frontend and Backend have verified the payment and decided it is successful as well. But the Apple Pay UI shows "Payment not completed". Any tips on how to troubleshoot this please?
best,
Chandru
I'm trying to enable merchant tokens in my test environment. I'm using the demo code below:
{
...
"recurringPaymentRequest": {
"paymentDescription": "A description of the recurring payment to display to the user in the payment sheet.",
"regularBilling": {
"label": "Recurring",
"amount": "4.99",
"paymentTiming": "recurring",
"recurringPaymentStartDate": "2023-08-11T11:20:32.369Z"
},
"trialBilling": {
"label": "7 Day Trial",
"amount": "0.00",
"paymentTiming": "recurring",
"recurringPaymentEndDate": "2023-08-11T11:20:32.369Z"
},
"billingAgreement": "A localized billing agreement displayed to the user in the payment sheet prior to the payment authorization.",
"managementURL": "https://applepaydemo.apple.com",
"tokenNotificationURL": "https://applepaydemo.apple.com"
},
...
}
I'm able to see the recurring prompts in the payment sheet, but after processing I do not see the merchant token anywhere. I'm looking in the paymentData object and I do not see the merchantTokenIdentifier. I've tried using the Visa, Mastercard, Amex, and Discover test cards, but still no luck. I seen similar threads on these forums, but never with an answer.
Has anybody been able to test merchant tokens in sandbox?
I have a working Apple Pay transaction page that works on Safari. But with the new ios 18 update and Apple Pay JS library. I see that a pop up sheet with the scannable code is shown on chrome browser. I tried that.
Upon scanning the code with iPhone 15 pro max. The apple pay payment sheet is shown on the phone but with an error Service Unavailable. What do I have to do to make it work? What went wrong? I checked the logs and have no clue of what is failing.
We have integrated Apple Pay in our web application via MasterCard Gateway. The testing is completed and now we need to move to production environment.
Can anyone guide what is the process to move to production environment?
Do we need to ask our client to create their own Apple Developer account to create merchant Ids and certificates?