Files
2026-03-18 18:26:24 +08:00

35 lines
1.1 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { query } from '@/lib/db';
import { verifyWebhookSignature } from '@/lib/lemonsqueezy';
export async function POST(request: NextRequest) {
try {
const rawBody = await request.text();
const signature = request.headers.get('x-signature') || '';
if (!verifyWebhookSignature(rawBody, signature)) {
return NextResponse.json({ error: 'Invalid signature' }, { status: 401 });
}
const event = JSON.parse(rawBody);
const eventName = event.meta?.event_name;
if (eventName === 'order_created') {
const sessionId = event.meta?.custom_data?.session_id;
const orderId = event.data?.id;
if (sessionId) {
await query(
`UPDATE sessions SET is_paid = TRUE, payment_id = $1, updated_at = NOW() WHERE id = $2`,
[String(orderId), sessionId]
);
}
}
return NextResponse.json({ received: true });
} catch (error) {
console.error('Webhook error:', error);
return NextResponse.json({ error: 'Webhook processing failed' }, { status: 500 });
}
}