// Initialize HelcimPay.js session const HELCIM_API_BASE = "https://api.helcim.com/v2"; export default defineEventHandler(async (event) => { try { const config = useRuntimeConfig(event); const body = await readBody(event); // Debug log the request body console.log("Initialize payment request body:", body); const helcimToken = config.public.helcimToken || process.env.NUXT_PUBLIC_HELCIM_TOKEN; // Determine payment type based on whether this is for a subscription or one-time payment const isEventTicket = body.metadata?.type === "event_ticket"; const amount = body.amount || 0; // For event tickets with amount > 0, we do a purchase // For subscriptions or card verification, we do verify const paymentType = isEventTicket && amount > 0 ? "purchase" : "verify"; const requestBody = { paymentType, amount: paymentType === "purchase" ? amount : 0, currency: "CAD", paymentMethod: "cc", }; // For subscription setup (verify mode), include customer code if provided // For one-time purchases (event tickets), don't include customer code // as the customer may not exist in Helcim yet if (body.customerCode && paymentType === "verify") { requestBody.customerCode = body.customerCode; } // Add product/event information for better display in Helcim modal if (body.metadata?.eventTitle) { // Some Helcim accounts don't support invoice numbers in initialization // Try multiple fields that might display in the modal requestBody.description = body.metadata.eventTitle; requestBody.notes = body.metadata.eventTitle; requestBody.orderNumber = `${body.metadata.eventId}`; } console.log("Helcim request body:", JSON.stringify(requestBody, null, 2)); // Initialize HelcimPay.js session const response = await fetch(`${HELCIM_API_BASE}/helcim-pay/initialize`, { method: "POST", headers: { accept: "application/json", "content-type": "application/json", "api-token": helcimToken, }, body: JSON.stringify(requestBody), }); if (!response.ok) { const errorText = await response.text(); console.error( "HelcimPay initialization failed:", response.status, errorText, ); throw createError({ statusCode: response.status, statusMessage: `Failed to initialize payment: ${errorText}`, }); } const paymentData = await response.json(); return { success: true, checkoutToken: paymentData.checkoutToken, secretToken: paymentData.secretToken, }; } catch (error) { console.error("Error initializing HelcimPay:", error); throw createError({ statusCode: error.statusCode || 500, statusMessage: error.message || "Failed to initialize payment", }); } });