如何延长厄瓜多尔支付网关模态框报错前的等待时长?
解决支付网关模态框报错的延迟处理方案
根据你遇到的问题——打开厄瓜多尔支付网关模态框时因速度过快触发服务器报错,核心原因是当前收到响应后立刻执行错误提示逻辑,未给服务器或前端资源预留足够处理时间。以下是两种针对性修改方案:
方案1:直接延迟错误提示显示
在onResponse的错误分支中,用setTimeout给服务器预留缓冲时间(毫秒数可根据实际情况调整):
onResponse: function(response) { console.log(response); announceTransaction(response); if (response.transaction["status_detail"] == 3) { showMessageSuccess(); } else { // 延迟1.5秒显示错误,可根据服务器响应速度调整数值 setTimeout(() => { showMessageError(); }, 1500); } }
方案2:等待异步钩子请求完成后再处理错误
announceTransaction是异步的fetch请求,可能还未完成就触发了错误提示,导致服务器端钩子逻辑未执行完毕。可以修改逻辑,等待请求完成后再处理提示:
首先更新announceTransaction函数,让它返回Promise:
function announceTransaction(data) { return fetch("{$paymentez_hook}", { method: "POST", body: JSON.stringify(data) }).then(function(response) { console.log(response); return response; }).catch(function(error) { console.log(error); throw error; }); }
然后修改onResponse为异步逻辑:
onResponse: async function(response) { console.log(response); try { await announceTransaction(response); if (response.transaction["status_detail"] == 3) { showMessageSuccess(); } else { showMessageError(); } } catch (error) { // 钩子请求失败时,延迟显示错误 setTimeout(() => { showMessageError(); }, 1000); } }
额外优化:防止重复点击触发请求
给支付按钮添加点击后禁用状态,避免用户重复点击导致多请求冲突:
btnOpenCheckout.addEventListener("click", function(){ this.disabled = true; PaymentCheckout.open({ // 原有参数 }); }); // 另外两个按钮同理,添加disabled逻辑
再在模态框的onClose回调中恢复按钮可用状态:
onClose: function() { console.log("cerró modal"); document.querySelector(".Rot").disabled = false; document.querySelector(".DifCon").disabled = false; document.querySelector(".DifSin").disabled = false; },
内容的提问来源于stack exchange,提问作者Ric Rey Rey
相关产品推荐
相关产品推荐

