import { getOrderByPaymentId, markOrderPaid } from '../../../lib/store.js'; import { molliePaymentStatus } from '../../../lib/payments.js'; import { sendOrderConfirmation } from '../../../lib/mailer.js'; export const prerender = false; // Mollie sendet POST mit `id` (Payment-ID). Status via API prüfen → bei paid Order setzen + Mail. export async function POST({ request }) { let paymentId = ''; try { const ct = request.headers.get('content-type') || ''; if (ct.includes('application/json')) { const b = await request.json().catch(() => ({})); paymentId = b.id || ''; } else { const form = await request.formData().catch(() => null); if (form) paymentId = String(form.get('id') || ''); } } catch {} if (!paymentId) return new Response('OK', { status: 200 }); try { const st = await molliePaymentStatus(paymentId); if (st.status === 'paid') { let order = getOrderByPaymentId(paymentId); if (!order && st.metadata && st.metadata.order_id) { const { getOrderById } = await import('../../../lib/store.js'); order = getOrderById(st.metadata.order_id); } if (order) { const res = markOrderPaid(order.id, { payment_id: paymentId, payment_provider: 'mollie' }); if (res.changed) { try { await sendOrderConfirmation(res.order); } catch {} } } } } catch (e) { // Webhook nie mit 500 quittieren (Mollie würde sonst dauerhaft retrien); 200 mit Log. console.error('[payments:webhook]', e && e.message || e); } return new Response('OK', { status: 200 }); } // GET zur einfachen Erreichbarkeitsprüfung. export async function GET() { return new Response('payments webhook ready', { status: 200 }); }