Php PayPal API上下文签出的Bug

Php PayPal API上下文签出的Bug,php,ajax,paypal,Php,Ajax,Paypal,我对PayPal Express结帐集成有问题: 如果在完全加载之前关闭弹出窗口,则在刷新之前弹出窗口将不再显示 这在所有浏览器上都会发生。Chrome控制台上的错误是: ppxo_paypal_legacy_gettoken_initxo Object print @ logger.js:65 这是我的密码: window.paypalCheckoutReady = function() { paypal.checkout.setup("{$PayPal_in_con

我对PayPal Express结帐集成有问题:

如果在完全加载之前关闭弹出窗口,则在刷新之前弹出窗口将不再显示

这在所有浏览器上都会发生。Chrome控制台上的错误是:

ppxo_paypal_legacy_gettoken_initxo Object
print @ logger.js:65
这是我的密码:

window.paypalCheckoutReady = function() {
            paypal.checkout.setup("{$PayPal_in_context_checkout_merchant_id}", {
                environment: {if $PAYPAL_SANDBOX}"sandbox"{else}"production"{/if},
                click: function(event) {
                    event.preventDefault();

                    paypal.checkout.initXO();
                    updateFormDatas();
                    var str = '';
                    if($('.paypal_payment_form input[name="id_product"]').length > 0)
                        str += '&id_product='+$('.paypal_payment_form input[name="id_product"]').val();
                    if($('.paypal_payment_form input[name="quantity"]').length > 0)
                        str += '&quantity='+$('.paypal_payment_form input[name="quantity"]').val();
                    if($('.paypal_payment_form input[name="id_p_attr"]').length > 0)
                        str += '&id_p_attr='+$('.paypal_payment_form input[name="id_p_attr"]').val();

                    $.support.cors = true;
                    $.ajax({
                        url: "{$base_dir_ssl}modules/paypal/express_checkout/payment.php",
                        type: "GET",
                        data: '&ajax=1&onlytoken=1&express_checkout='+$('input[name="express_checkout"]').val()+'&current_shop_url='+$('input[name="current_shop_url"]').val()+'&bn='+$('input[name="bn"]').val()+str,   
                        async: true,
                        crossDomain: true,


                        success: function (token) {
                            var url = paypal.checkout.urlPrefix +token;

                            paypal.checkout.startFlow(url);
                        },
                        error: function (responseData, textStatus, errorThrown) {
                            alert("Error in ajax post"+responseData.statusText);

                            paypal.checkout.closeFlow();
                        }
                    });
                },

                buttons: [
  {
    container: 'paypal_process_payment',
    type: 'checkout',
    color: 'blue',
    size: 'small',
    shape: 'pill'
  },
  {
    container: 'payment_paypal_express_checkout',
    type: 'checkout',
    color: 'gold',
    size: 'small',
    shape: 'pill'
  }
]
            });
        };

我遇到了同样的问题

查看源代码后,发现当
paypal.checkout.initXO()时
paypal.checkout.startFlow函数包装在一个once函数中,这意味着您只能调用startFlow一次。并且会覆盖
paypal.checkout.initXO
以在控制台中显示警告

在内部,
paypal.checkout.closeFlow
调用了
paypal.checkout.reset
,这对重置这些功能很重要

当用户过早地单击关闭按钮时,问题就出现了,此时startFlow承诺没有得到解决(这意味着当用户关闭模式时,它将重定向到已取消的url),也没有点击
paypal.checkout.closeFlow
catch


我能够通过跟踪用户单击按钮的次数来解决这个问题,如果不止一次,我会在
paypal.checkout.initXO()之前调用
paypal.checkout.closeFlow
(将重置)

所有浏览器都会出现这种情况吗?当然会