[英]Bug with PayPal API context checkout
我对 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
catch 是'也没有被击中。
我能够解决这个问题,通过跟踪用户点击按钮的次数,如果它不止一次,我在paypal.checkout.initXO();
之前调用了paypal.checkout.closeFlow
(它将重置paypal.checkout.initXO();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.