46 lines
1.6 KiB
JavaScript
46 lines
1.6 KiB
JavaScript
const midtransCore = require('../../../core/midtrans.service');
|
|
const paymentLogger = require('../../../helpers/payment_logger.helper');
|
|
const db = require('../../../../models/migration');
|
|
|
|
class PayLaterService {
|
|
async createTransaction(payload, type) {
|
|
let { order_id, external_id, amount, customer_details, item_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: type,
|
|
transaction_details: {
|
|
order_id: external_id,
|
|
gross_amount: amount
|
|
},
|
|
customer_details: customer_details,
|
|
item_details: item_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 PayLater Error (${type}): ${error.message}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = new PayLaterService();
|