UNPKG

@unchainedshop/plugins

Version:

Official plugin collection for the Unchained Engine with payment, delivery, and pricing adapters

38 lines (37 loc) 1.85 kB
import { createLogger } from '@unchainedshop/logger'; import { getTransaction, getTransactionCompletion } from "./api.js"; const logger = createLogger('unchained:postfinance-checkout:handler'); export const postfinanceCheckoutHandler = async (req, res) => { const context = req.unchainedContext; const { services, modules } = context; const data = req.body; if (data.listenerEntityTechnicalName === 'TransactionCompletion') { try { const transactionCompletion = await getTransactionCompletion(data.entityId); const transaction = await getTransaction(transactionCompletion ? transactionCompletion.linkedTransaction : data.entityId); const { orderPaymentId } = transaction.metaData; const orderPayment = await modules.orders.payments.findOrderPayment({ orderPaymentId, }); if (!orderPayment) throw new Error('Order Payment not found'); const order = await services.orders.checkoutOrder(orderPayment.orderId, { paymentContext: { transactionId: transactionCompletion.linkedTransaction, }, }); if (!order) throw new Error(`Order with id ${orderPayment.orderId} not found`); logger.info(`Transaction ${transactionCompletion.linkedTransaction} marked order payment ID ${transaction.metaData?.orderPaymentId} as paid`); res.status(200).send(`Order marked as paid: ${order.orderNumber}`); } catch (e) { logger.error(e); res.status(500).send({ name: e.name, code: e.code, message: e.message }); } } else { logger.error(`Received unknown listenerEntityTechnicalName ${data.listenerEntityTechnicalName}`); res.status(404).end(); } };