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

View File

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

View File

@ -12,8 +12,8 @@ class WindsurfAdapter extends SiteAdapter {
// 数据生成器
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();
// 初始化数据库连接(用于卡号去重)
try {
await database.initialize();
this.log('info', '✓ 数据库连接已初始化');
} catch (error) {
this.log('warn', `数据库初始化失败,将仅使用内存去重: ${error.message}`);
}
this.log('info', '生成账户数据...');
// 生成账户数据
@ -245,13 +253,13 @@ class WindsurfAdapter extends SiteAdapter {
}
/**
* 重新生成银行卡用于重试
* 生成银行卡第一次或重试都调用此方法
*/
async regenerateCard() {
async generateCard() {
const newCard = await this.cardGen.generate();
this.context.data.card = newCard;
const bin = newCard.number.substring(0, 9);
this.log('info', `重新生成卡号: ${newCard.number} (BIN: ${bin})`);
this.log('info', `生成卡号: ${newCard.number} (BIN: ${bin})`);
return { card: newCard };
}