const midtransCore = require('../../../core/midtrans.service'); const paymentLogger = require('../../../helpers/payment_logger.helper'); const db = require('../../../../models/migration'); class CreditCardService { async createTransaction(payload) { let { order_id, external_id, amount, customer_details, credit_card_token } = payload; if (!amount) { let order = null; if (order_id) order = await db.Order.findByPk(order_id); if (!order && external_id) order = await db.Order.findOne({ where: { orderID: external_id } }); if (!order) throw new Error("Amount wajib diisi atau order_id/external_id tidak valid"); amount = order.total; payload.amount = amount; } const parameter = { payment_type: "credit_card", transaction_details: { order_id: external_id, gross_amount: amount }, credit_card: { token_id: credit_card_token, authentication: true }, customer_details: customer_details, custom_expiry: { expiry_duration: parseInt(process.env.MIDTRANS_EXPIRY_DURATION || 24), unit: process.env.MIDTRANS_EXPIRY_UNIT || 'hour' } }; try { const response = await midtransCore.getCoreApi().charge(parameter); await paymentLogger.log(response, payload); return response; } catch (error) { throw new Error(`Midtrans Credit Card Error: ${error.message}`); } } } module.exports = new CreditCardService();