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, пройти полную проверку продавца

Шаги обсуждаются здесь: на проверку продавца

Это старый вопрос, но я подумал, что опубликую свой опыт, если он актуален. При тестировании на моем локальном сервере я наблюдал то же поведение, что и на оригинальном плакате, но смог заставить работать платежные листы.

Что сработало для меня

  1. Войдите в AppleID как тестовый пользователь песочницы
  2. Укажите "localhost" в качестве домена при выполнении проверки продавца, например:

    {
      "merchantIdentifier": "<your merchant ID>",
      "displayName": "<your merchant display name>",
      "initiative": "web",
      "initiativeContext": "localhost"
    }
    
Другие вопросы по тегам