У меня проблема с интеграцией PayPal Express Checkout: https://developer.paypal.com/docs/classic/express-checkout/in-context/javascript_advanced_settings/#color
Если я закрою всплывающее окно до того, как оно загрузится полностью, всплывающее окно больше не будет отображаться, пока я не обновлюсь!
Это происходит во всех браузерах. Ошибка на консоли 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()+'¤t_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 обернута в однократную функцию, что означает, что вы можете вызвать startFlow только один раз. и paypal.checkout.initXO перезаписывается, чтобы отобразить предупреждение в консоли.
Внутри paypal.checkout.closeFlow есть вызов paypal.checkout.reset, который важен для сброса этих функций.
Проблема возникала, когда пользователь нажимает кнопку закрытия слишком рано, когда обещание startFlow не было разрешено (что означает, что когда пользователь закрывает модальное окно, оно перенаправляется на отмененный URL-адрес), ни ловушка paypal.checkout.closeFlow также не была задействована .
Мне удалось решить проблему, отслеживая, сколько раз пользователь нажимал кнопку, если это было более одного раза, я позвонил paypal.checkout.closeFlow (который будет сброшен) до paypal.checkout.initXO();
Это происходит во всех браузерах?