floranet/api/controller/Payment/redsys/redsys.providers.js

53 lines
1.5 KiB
JavaScript

const db = require("../../../db/db");
const RedsysPos = require('redsys-pos');
const {
CURRENCIES, TRANSACTION_TYPES
} = RedsysPos;
class RedsysProviders {
async New(orderFk, price) {
try {
const MERCHANT_KEY = process.env.REDSYS_MERCHANT_KEY;
const redsys = new RedsysPos(MERCHANT_KEY);
let orderValue = String(orderFk)
while (true) {
if (orderValue.length == 4) {
break
}
orderValue = '0' + orderValue
}
const regexAmount = /[,.]/
const amountValue = regexAmount.test(String(price)) ? String(price).replace(/[,.]/g, '') : String(price + '00')
const obj = {
amount: amountValue,
orderReference: orderValue,
merchantName: process.env.REDSYS_MERCHANT_NAME,
merchantCode: process.env.REDSYS_MERCHANT_CODE,
currency: "978",
transactionType: "0", // '0'
terminal: process.env.REDSYS_MERCHANT_TERMINAL,
merchantURL: `${process.env.BASE_URL}/payments/redsys/notification`,
successURL: `${process.env.BASE_URL}/checkout/success?orderId=${orderFk}&type=redsys`,
errorURL: `${process.env.BASE_URL}/checkout/error`
};
const result = redsys.makePaymentParameters(obj);
return { ...result, DS_MERCHANT_ORDER: obj.orderReference }
} catch (error) {
throw error;
}
}
async success(orderId) {
try {
return await db.order_confirm(orderId)
} catch (error) {
throw error
}
}
}
module.exports = new RedsysProviders();