const midtransCore = require('../../../core/midtrans.service'); const paymentLogger = require('../../../helpers/payment_logger.helper'); const db = require('../../../../models/migration'); class BankTransferService { async createTransaction(payload, bank) { let { order_id, external_id, amount, customer_details } = 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: "bank_transfer", transaction_details: { order_id: external_id, gross_amount: amount }, bank_transfer: { bank: bank }, customer_details: customer_details, custom_expiry: { expiry_duration: parseInt(process.env.MIDTRANS_EXPIRY_DURATION || 24), unit: process.env.MIDTRANS_EXPIRY_UNIT || 'hour' } }; if (bank === 'mandiri') { parameter.payment_type = "echannel"; parameter.echannel = { bill_info1: "Payment For:", bill_info2: "Invoice " + (external_id || order_id) }; delete parameter.bank_transfer; } try { const response = await midtransCore.getCoreApi().charge(parameter); await paymentLogger.log(response, payload); return response; } catch (error) { throw new Error(`Midtrans Error (${bank}): ${error.message}`); } } } module.exports = new BankTransferService();