/** * 提现API * 用户提现到微信零钱或支付宝 */ import { NextRequest, NextResponse } from 'next/server' import { query } from '@/lib/db' // 确保提现表存在 async function ensureWithdrawalsTable() { try { await query(` CREATE TABLE IF NOT EXISTS withdrawals ( id VARCHAR(64) PRIMARY KEY, user_id VARCHAR(64) NOT NULL, amount DECIMAL(10,2) NOT NULL, account_type VARCHAR(20) DEFAULT 'wechat', account VARCHAR(100), status ENUM('pending', 'completed', 'failed') DEFAULT 'pending', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, completed_at TIMESTAMP NULL, INDEX idx_user_id (user_id), INDEX idx_status (status) ) `) } catch (e) { console.log('[Withdraw] 表已存在或创建失败') } } export async function POST(request: NextRequest) { try { const body = await request.json() const { userId, amount } = body if (!userId) { return NextResponse.json({ success: false, message: '缺少用户ID' }, { status: 400 }) } if (!amount || amount <= 0) { return NextResponse.json({ success: false, message: '提现金额无效' }, { status: 400 }) } // 确保表存在 await ensureWithdrawalsTable() // 查询用户信息 const users = await query('SELECT * FROM users WHERE id = ?', [userId]) as any[] if (!users || users.length === 0) { return NextResponse.json({ success: false, message: '用户不存在' }, { status: 404 }) } const user = users[0] // 检查是否绑定支付方式(微信号或支付宝) // 如果没有绑定,提示用户先绑定 const wechatId = user.wechat || user.wechat_id || '' const alipayId = user.alipay || '' if (!wechatId && !alipayId) { return NextResponse.json({ success: false, message: '请先在设置中绑定微信号或支付宝', needBind: true }) } // 查询可提现金额(待结算收益) let totalEarnings = 0 try { const earningsResult = await query(` SELECT COALESCE(SUM(commission), 0) as total_commission FROM referral_bindings WHERE referrer_id = ? AND status = 'converted' `, [userId]) as any[] totalEarnings = parseFloat(earningsResult[0]?.total_commission || 0) } catch (e) { // 如果表不存在,收益为0 console.log('[Withdraw] 查询收益失败,可能表不存在') } // 查询已提现金额 let withdrawnAmount = 0 try { const withdrawnResult = await query(` SELECT COALESCE(SUM(amount), 0) as withdrawn FROM withdrawals WHERE user_id = ? AND status = 'completed' `, [userId]) as any[] withdrawnAmount = parseFloat(withdrawnResult[0]?.withdrawn || 0) } catch (e) { // 如果表不存在,已提现为0 } const availableAmount = totalEarnings - withdrawnAmount if (amount > availableAmount) { return NextResponse.json({ success: false, message: `可提现金额不足,当前可提现 ¥${availableAmount.toFixed(2)}` }) } // 创建提现记录 const withdrawId = `W${Date.now()}` const accountType = alipayId ? 'alipay' : 'wechat' const account = alipayId || wechatId try { await query(` INSERT INTO withdrawals (id, user_id, amount, account_type, account, status, created_at) VALUES (?, ?, ?, ?, ?, 'pending', NOW()) `, [withdrawId, userId, amount, accountType, account]) // TODO: 实际调用微信企业付款或支付宝转账API // 这里先模拟成功 await query(`UPDATE withdrawals SET status = 'completed', completed_at = NOW() WHERE id = ?`, [withdrawId]) } catch (e) { console.log('[Withdraw] 创建提现记录失败:', e) } return NextResponse.json({ success: true, message: '提现成功', data: { withdrawId, amount, account, accountType: accountType === 'alipay' ? '支付宝' : '微信' } }) } catch (error) { console.error('[Withdraw] Error:', error) return NextResponse.json({ success: false, message: '提现失败: ' + String(error) }, { status: 500 }) } }