如何避免生成重复序列号?支付审批流程问题咨询
解决支付审批序列号重复生成问题
核心思路:在生成序列号前拦截验证状态,或复用已生成的序列号
1. 前置拦截:生成序列号前先检查验证/警告状态
在触发支付提交的逻辑中,先判断check wizard第三步是否存在未处理的验证或警告消息,若有则直接终止流程,不调用序列号生成工具。
示例伪代码:
function handlePaymentSubmit() { // 检查第三步是否存在验证/警告 const hasPendingWarnings = checkStep3ValidationStatus(); if (hasPendingWarnings) { alert("请先处理当前的验证提示或警告消息"); return; } // 验证通过后才生成序列号 const sequenceId = sequenceUtil.generate(); // 执行后续支付流程 proceedWithPayment(sequenceId); }
2. 序列号复用:缓存已生成的序列号直到支付成功
如果已经生成了序列号但因验证失败导致支付中断,将该序列号暂存到会话存储或状态管理容器中,用户处理完警告再次提交时直接复用,避免重复生成。
示例伪代码:
// 用全局变量或状态管理工具缓存序列号 let cachedSequenceId = null; function handlePaymentSubmit() { const hasPendingWarnings = checkStep3ValidationStatus(); if (hasPendingWarnings) { alert("请先处理当前的验证提示或警告消息"); return; } // 优先使用缓存的序列号,无缓存则生成新的 const targetSequenceId = cachedSequenceId || sequenceUtil.generate(); const paymentResult = proceedWithPayment(targetSequenceId); // 支付成功则清空缓存,验证失败则保留缓存 if (paymentResult.isSuccess) { cachedSequenceId = null; } else if (paymentResult.hasValidationErrors) { cachedSequenceId = targetSequenceId; } }
3. 调整生成时机:验证完全通过后再生成序列号
把序列号生成的时机从“提交支付”阶段,推迟到“check wizard第三步验证通过且无警告”的回调中,从根源上避免验证未通过时生成序列号。
示例伪代码:
// 第三步验证完成后的回调 function onStep3ValidationFinished(isValid, hasWarnings) { if (isValid && !hasWarnings) { // 验证无警告,生成并存储序列号 window.paymentSequence = sequenceUtil.generate(); } else { // 存在警告,清空已生成的序列号 window.paymentSequence = null; } } // 支付提交时直接使用预先生成的序列号 function handlePaymentSubmit() { const sequenceId = window.paymentSequence; if (!sequenceId) { alert("请先完成第三步的所有验证并确保无警告"); return; } proceedWithPayment(sequenceId); }
内容的提问来源于stack exchange,提问作者CodeForLife
相关产品推荐
相关产品推荐

