35 lines
1.1 KiB
TypeScript
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 });
|
|
}
|
|
}
|