Apple Pay - onvalidatemerchant 付款未完成错误

ric*_*boy 5 ios applepay applepayjs

我正在我们的网站上实施苹果支付。我没有 macOS 设备,并且正在使用 Windows Visual Studios / mvcnet。我已经完成了所有的merchantID和认证工作,并在Windows机器上配置了它。我正在使用 Apple Pay JS,并且在使用 session.begin() 打开付款表的步骤中。我使用ajax调用来检索merchantSession,我相信它成功了,因为session.completeMerchantValidation(merchantSession)消耗的对象包含纪元号、过期时间和站点名称。但是,在completeMerchantValidation 之后,立即触发oncancel 事件,并且我收到一条红色警报,提示“付款未完成”。

我需要有关如何从这里继续进行的帮助,我在网上的某个地方读到我正在测试的域需要是注册的商家域。例如,当我测试按钮的功能时,我需要访问 www.mySite.com,其中我将 mySite.com 注册为域。有人可以确认这是否属实吗?因为我正在通过本地 IP 地址从我的 iOS 设备访问该网站。如果情况并非如此,那么我所在的地方提供的任何帮助都会有所帮助。

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();
};
Run Code Online (Sandbox Code Playgroud)

Tib*_*mas 2

您在错误的位置创建了Apple pay 会话。您需要从服务器端而不是 客户端创建它。

这些链接可能有助于请求苹果支付付款会话完成商家验证

此处讨论步骤:验证商家

  • 也许OP的代码与现在不同,但你的答案具有误导性。使用 Apple Pay JS,您可以在客户端创建会话,但在服务器端执行商家验证。 (5认同)