This commit is contained in:
dengqichen 2025-11-19 17:44:35 +08:00
parent 1c642a8236
commit 2cc8139924
3 changed files with 22 additions and 10 deletions

View File

@ -62,12 +62,16 @@ class CardGenerator {
*/ */
async checkCardNumberInDatabase(cardNumber) { async checkCardNumberInDatabase(cardNumber) {
try { try {
// 检查数据库连接是否已初始化
if (!this.database || !this.database.pool) {
return false; // 数据库未初始化,跳过数据库查询
}
const sql = 'SELECT COUNT(*) as count FROM windsurf_accounts WHERE payment_card_number = ?'; const sql = 'SELECT COUNT(*) as count FROM windsurf_accounts WHERE payment_card_number = ?';
const rows = await this.database.query(sql, [cardNumber]); const rows = await this.database.query(sql, [cardNumber]);
return rows[0].count > 0; return rows[0].count > 0;
} catch (error) { } catch (error) {
// 如果数据库查询失败,记录错误但不影响生成(降级为仅内存去重) // 如果数据库查询失败,静默降级(不输出,避免乱码)
console.warn('数据库查询失败,仅使用内存去重:', error.message);
return false; return false;
} }
} }

View File

@ -120,12 +120,12 @@ workflow:
# ==================== 步骤 6: 填写支付信息(带重试) ==================== # ==================== 步骤 6: 填写支付信息(带重试) ====================
- action: retryBlock - action: retryBlock
name: "提交支付并验证" name: "提交支付并验证"
maxRetries: 5 maxRetries: 9999 # 无限重试,直到成功
retryDelay: 15000 # 增加到15秒避免触发Stripe风控 retryDelay: 15000 # 增加到15秒避免触发Stripe风控
onRetryBefore: onRetryBefore:
# 重试前重新生成银行卡 # 生成银行卡(第一次或重试都生成新卡)
- action: custom - action: custom
handler: "regenerateCard" handler: "generateCard"
steps: steps:
# 6.1 选择银行卡支付方式(每次重试都重新选择) # 6.1 选择银行卡支付方式(每次重试都重新选择)

View File

@ -12,8 +12,8 @@ class WindsurfAdapter extends SiteAdapter {
// 数据生成器 // 数据生成器
this.dataGen = new AccountDataGenerator(); this.dataGen = new AccountDataGenerator();
// 卡号生成器(传入数据库连接以实现数据库去重) // 卡号生成器(传入数据库连接对象以实现数据库去重)
this.cardGen = new CardGenerator(database); this.cardGen = new CardGenerator(database.connection);
} }
/** /**
@ -23,6 +23,14 @@ class WindsurfAdapter extends SiteAdapter {
// 先调用父类清理浏览器状态 // 先调用父类清理浏览器状态
await super.beforeWorkflow(); await super.beforeWorkflow();
// 初始化数据库连接(用于卡号去重)
try {
await database.initialize();
this.log('info', '✓ 数据库连接已初始化');
} catch (error) {
this.log('warn', `数据库初始化失败,将仅使用内存去重: ${error.message}`);
}
this.log('info', '生成账户数据...'); this.log('info', '生成账户数据...');
// 生成账户数据 // 生成账户数据
@ -245,13 +253,13 @@ class WindsurfAdapter extends SiteAdapter {
} }
/** /**
* 重新生成银行卡用于重试 * 生成银行卡第一次或重试都调用此方法
*/ */
async regenerateCard() { async generateCard() {
const newCard = await this.cardGen.generate(); const newCard = await this.cardGen.generate();
this.context.data.card = newCard; this.context.data.card = newCard;
const bin = newCard.number.substring(0, 9); const bin = newCard.number.substring(0, 9);
this.log('info', `重新生成卡号: ${newCard.number} (BIN: ${bin})`); this.log('info', `生成卡号: ${newCard.number} (BIN: ${bin})`);
return { card: newCard }; return { card: newCard };
} }