#!/usr/bin/env tsx import { PrismaClient } from '@prisma/client' const prisma = new PrismaClient() // 模拟修复后的 webhook 处理逻辑 async function testWebhookFix() { try { console.log('🧪 Testing webhook fix...') // 模拟 Stripe 订阅数据 const mockSubscription = { id: "sub_1Rt8nRLW0cChKPJ0Osn5UBcV", customer: "cus_SojwymqWZ4EXlZ", status: "active", start_date: 1754492307, items: { data: [{ price: { id: "price_1RslfmLW0cChKPJ0VurJSg9I" }, current_period_start: 1754492307, current_period_end: 1757170707 }] } } // 提取数据(使用修复后的逻辑) const customerId = mockSubscription.customer const status = mockSubscription.status const stripeSubscriptionId = mockSubscription.id const items = mockSubscription.items const priceId = items?.data[0]?.price?.id const currentPeriodStart = items?.data[0]?.current_period_start || mockSubscription.start_date const currentPeriodEnd = items?.data[0]?.current_period_end || (mockSubscription.start_date + 30 * 24 * 60 * 60) console.log('📊 Extracted data:') console.log(' customerId:', customerId) console.log(' status:', status) console.log(' stripeSubscriptionId:', stripeSubscriptionId) console.log(' priceId:', priceId) console.log(' currentPeriodStart:', currentPeriodStart) console.log(' currentPeriodEnd:', currentPeriodEnd) // 验证日期 if (!currentPeriodStart || !currentPeriodEnd) { console.error('❌ Missing period dates') return } const startDate = new Date(currentPeriodStart * 1000) const endDate = new Date(currentPeriodEnd * 1000) console.log('📅 Converted dates:') console.log(' startDate:', startDate.toISOString()) console.log(' endDate:', endDate.toISOString()) // 检查日期是否有效 if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) { console.error('❌ Invalid dates') return } console.log('✅ Dates are valid!') // 查找用户 const user = await prisma.user.findFirst({ where: { stripeCustomerId: customerId } }) if (!user) { console.error('❌ User not found for customer:', customerId) return } console.log('👤 Found user:', user.email) // 查找套餐 const plan = await prisma.subscriptionPlan.findFirst({ where: { stripePriceId: priceId } }) if (!plan) { console.error('❌ Plan not found for price:', priceId) return } console.log('📦 Found plan:', plan.name) // 模拟创建订阅记录 console.log('🔄 Would create subscription with data:') console.log({ userId: user.id, subscriptionPlanId: plan.id, stripeSubscriptionId, stripeCustomerId: customerId, isActive: true, status: 'active', startDate, endDate, }) console.log('✅ Webhook fix test completed successfully!') } catch (error) { console.error('❌ Error testing webhook fix:', error) } finally { await prisma.$disconnect() } } testWebhookFix()