const midtransCore = require('../../../core/midtrans.service'); const paymentLogger = require('../../../helpers/payment_logger.helper'); const db = require('../../../../models/migration'); class CStoreService { async createTransaction(payload, store) { 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: store, transaction_details: { order_id: external_id, gross_amount: amount }, customer_details: customer_details, custom_expiry: { expiry_duration: parseInt(process.env.MIDTRANS_EXPIRY_DURATION || 24), unit: process.env.MIDTRANS_EXPIRY_UNIT || 'hour' } }; if (store === 'indomaret') { parameter.indomaret = { message: "Pembayaran untuk Invoice " + (external_id || order_id) }; } if (store === 'alfamart') { parameter.alfamart = { alfamart_free_text_1: "Terima kasih telah berbelanja", alfamart_free_text_2: "Simpan struk Anda" }; } try { const response = await midtransCore.getCoreApi().charge(parameter); await paymentLogger.log(response, payload); return response; } catch (error) { throw new Error(`Midtrans Error (${store}): ${error.message}`); } } } module.exports = new CStoreService();