Apple Pay - onvalidatemerchant Ошибка оплаты не завершена
Я внедряю Apple Pay на нашем сайте. У меня нет устройства MacOS, и я использую Windows Visual Studio / mvcnet. Я сделал все merchantID и сертификацию и настроил ее на машине с Windows. Я использую Apple Pay JS и на шаге, когда платежный лист открывается с помощью session.begin(). Я использую ajax-вызов для извлечения merchantSession, что, по моему мнению, происходит успешно, поскольку объект, потребляемый session.completeMerchantValidation (merchantSession), содержит номер эпохи, время истечения и имя сайта. Однако сразу после completeMerchantValidation происходит событие oncancel, и я получаю красное предупреждение с надписью "Платеж не завершен".
Мне нужна помощь в том, как действовать дальше, я где-то читал в Интернете, что домен, на котором я тестирую, должен быть зарегистрированным торговым доменом. Например, когда я тестирую функциональность кнопки, мне нужно зайти на сайт www.mySite.com, где mySite.com зарегистрирован как домен. Может кто-то подтвердить, если это правда.. потому что я захожу на сайт с моих устройств iOS через локальный IP-адрес. Если это не так, любая помощь, исходящая от того, где я нахожусь, будет полезна.
function StartPaySession() {
var lineItems = [
{
label: 'Shipping',
amount: '0.00',
}
];
var shippingMethods = [
{
label: 'Free Shipping',
amount: '0.00',
identifier: 'free',
detail: 'Delivers in five business days',
},
{
label: 'Express Shipping',
amount: '5.00',
identifier: 'express',
detail: 'Delivers in two business days',
}
];
var total = {
label: 'Apple Pay Example',
amount: '8.99',
};
var paymentData = {
countryCode: 'US',
currencyCode: 'USD',
shippingMethods: shippingMethods,
lineItems: lineItems,
total: total,
supportedNetworks: ['amex', 'discover', 'masterCard', 'visa'],
merchantCapabilities: ['supports3DS'],
requiredShippingContactFields: ['postalAddress', 'email'],
};
var paySession = new ApplePaySession(2, paymentData);
paySession.onvalidatemerchant = function (event) {
var validationData = { ValidationUrl: event.validationURL };
$.ajax({
url: '/orders/cart/startapplepaysession',
method: "POST",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(validationData)
}).then(function (merchantSession) {
paySession.completeMerchantValidation(merchantSession);
alert("end = " + window.location.host);
}, function (error) {
alert("merchant validation unsuccessful: " + JSON.stringify(error));
paySession.abort();
});
};
paySession.onpaymentmethodselected = function (event) {
alert("1");
paySession.completePaymentMethodSelection(total, lineItems);
};
paySession.onshippingcontactselected = function (event) {
alert("2");
paySession.completeShippingContactSelection(ApplePaySession.STATUS_SUCCESS, shippingMethods, total, lineItems);
};
paySession.onshippingmethodselected = function (event) {
alert("3");
paySession.completeShippingMethodSelection(ApplePaySession.STATUS_SUCCESS, total, lineItems);
}
paySession.onpaymentauthorized = function (event) {
var token = event.payment.token;
alert("payment authorization | token = " + token);
paySession.completePayment(ApplePaySession.STATUS_SUCCESS);
}
paySession.oncancel = function (event) {
alert("payment cancel error " + event);
}
paySession.begin();
};
1 ответ
Вы создаете сеанс оплаты Apple в неправильном месте. Вам нужно создать его на стороне сервера, а не на стороне клиента.
Эти ссылки могут помочь запросить сессию оплаты Apple, пройти полную проверку продавца
Шаги обсуждаются здесь: на проверку продавца
Это старый вопрос, но я подумал, что опубликую свой опыт, если он актуален. При тестировании на моем локальном сервере я наблюдал то же поведение, что и на оригинальном плакате, но смог заставить работать платежные листы.
Что сработало для меня
- Войдите в AppleID как тестовый пользователь песочницы
Укажите "localhost" в качестве домена при выполнении проверки продавца, например:
{ "merchantIdentifier": "<your merchant ID>", "displayName": "<your merchant display name>", "initiative": "web", "initiativeContext": "localhost" }