javascript - PayPal 关联结账点击事件

标签 javascript php jquery paypal express-checkout

我正在使用 PayPal 上下文快速结账。这是我目前拥有的:

paypal.checkout.setup("my_app.domain.co.uk", {
    locale: 'en_GB',
    environment: 'production',
    button: 'PayPalSubmit'
});

和 HTML:

<form id="PayPalForm" action="/lib/paypal/paypal_ec_redirect.php" method="POST">
    <input type="hidden" name="currencyCodeType" value="GBP" />
    <input type="hidden" name="paymentType" value="Sale" />
    <input type="hidden" name="PAYMENTREQUEST_0_PAYMENTACTION" value="Sale" />
    <input type="hidden" name="L_PAYMENTREQUEST_0_NAME0" value="Test" />
    <input type="hidden" name="PAYMENTREQUEST_0_DESC" value="Test" />
    <input type="hidden" name="L_PAYMENTREQUEST_0_QTY0" value="1" />
    <input type="hidden" name="PAYMENTREQUEST_0_ITEMAMT" value="1" />
    <input type="hidden" name="PAYMENTREQUEST_0_AMT" value="1">
    <input type="hidden" name="NOSHIPPING" value="1">
    <button type="submit" id="PayPalSubmit" class="jfk-button-action">
        Pay with PayPal
    </button>
</form>
<script src="//www.paypalobjects.com/api/checkout.js" async></script>

这目前有效,但是我想添加一个回调来在用户点击支付按钮时改变一些东西,即一旦 PayPal 弹出窗口打开。我试过这个:

paypal.checkout.setup("my_app.domain.co.uk", {
    locale: 'en_GB',
    environment: 'production',
    button: 'PayPalSubmit',
    click: function () {
        paypal.checkout.initXO();
        $('#popup').html('Processing your booking...');
    }
});

这在 Google Chrome 上运行良好,但在 Firefox 和 IE 上弹出窗口打开,PayPal 加载 gif 只是卡在那里,窗口标题为 about:blank。有谁知道这是怎么回事吗?

最佳答案

我认为您并没有真正使用 PayPal-In-Context-Workflow。 使用此脚本提交表单,您将到达“/lib/paypal/paypal_ec_redirect.php”。 对于上下文工作流,您首先设置付款并获得 token 。 然后在 JS 中必须使用“paypal.checkout.startFlow(token)”开始流程。 这是我使用的代码示例。 “event.preventDefault();”不执行表单url,ajax是获取token。

        window.paypalCheckoutReady = function () {
        //alert('paypalCheckoutReady');
        paypal.checkout.setup('@Model.PayPalMerchantId', {
            environment: '@Model.PayPalEnvironment',
            click: function (event) {
                //alert('paypalCheckoutClick');
                $('#checkout').attr("disabled", "disabled");
                event.preventDefault();
                paypal.checkout.initXO();
                $.support.cor = true;
                $.ajax({
                    url: '@Url.Action("Checkout","shop")',
                    data: $('#payment-form').serialize(),
                    type: 'POST',
                    async: false,
                    crossDomain: true,
                    success: function (token) {
                        //alert('checkout success: ' + token);
                        //var url = paypal.checkout.urlPrefix + token;
                        paypal.checkout.startFlow(token);
                    },
                    error: function (responseData, textStatus, errorThrown) {
                        //alert('checkout error: ' + textStatus);
                        paypal.checkout.closeFlow();
                    }
                });
            },
            condition: function () {
                var ispaypal = $('input[name=paymentmethod]:checked', '#payment-form').val() == 'paypal';
                //alert(ispaypal);
                return ispaypal;
            },
            button: ['checkout'],
        });
    }

对我来说

关于javascript - PayPal 关联结账点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38973091/

相关文章:

javascript - 如何调试javascript?

javascript - jQuery 问题与谷歌浏览器中的表单和鼠标悬停

javascript - 如何根据列为空或不为空的位置从类中隐藏每个 Div

javascript - 不要淡入,直到淡出完全完成

javascript - 在 Polymer 元素中使用 JavaScript

javascript - 如何在第 3 个和第 4 个列表项之间插入一个关键线,但宽度是父元素的宽度?

javascript - 如何为 Cordova 文件传输创建工作进度条

php - 为什么 Linkedin Ugc Image Post 返回 500 错误?

php - 使 zend EmailAddress 表单验证器仅返回一条自定义错误消息

PHP 对象数组