114 lines
3.1 KiB
JavaScript
114 lines
3.1 KiB
JavaScript
const db = require("../../db/db");
|
|
const payPalProviders = require('./paypal.providers')
|
|
const redsysProviders = require('./redsys.providers')
|
|
|
|
class PaymentServices {
|
|
async Create(req, res) {
|
|
try {
|
|
//parâmetros para retornar os produtos que serão comprados
|
|
const { products, dateExpired, postalCode, customer, type } = req.body
|
|
const _products = await db.getProducts(dateExpired, postalCode)
|
|
|
|
const productsFilter = _products[0].filter((item) => {
|
|
if (products.includes(item.id)) {
|
|
return item
|
|
}
|
|
});
|
|
|
|
if (productsFilter.length !== products.length) {
|
|
return res.status(422).send({
|
|
data: {
|
|
message: "Uno de los productos no existe."
|
|
}
|
|
})
|
|
}
|
|
|
|
let priceIntial = 0
|
|
let price = productsFilter.reduce((accumulator, curValue) => accumulator + Number(curValue.price), priceIntial)
|
|
|
|
let productsIds = ''
|
|
for (let i = 0; i < products.length; i++) {
|
|
productsIds += `${products[i]}${i === products.length - 1 ? '' : '-'}`
|
|
}
|
|
|
|
//Create new order
|
|
const jsonOrderData = JSON.stringify({
|
|
"customer": {
|
|
customerData: {
|
|
...customer.customerData,
|
|
type: type,
|
|
products: productsFilter
|
|
}
|
|
},
|
|
})
|
|
const order = await db.orderData_put(jsonOrderData);
|
|
const orderFk = order[0][0].orderFk
|
|
|
|
if (type === "paypal") {
|
|
const data = await payPalProviders.New(orderFk, price)
|
|
return res.status(200).send({
|
|
data: { ...data, orderId: orderFk }
|
|
})
|
|
}
|
|
if (type === "redsys") {
|
|
const data = await redsysProviders.New(orderFk, price)
|
|
return res.status(200).send({
|
|
data: { ...data, orderId: orderFk }
|
|
})
|
|
}
|
|
/* if (newOrder) {
|
|
return res.status(200).send({
|
|
data: { link: newOrder.links, orderId: orderFk }
|
|
})
|
|
} */
|
|
} catch (error) {
|
|
console.log(error);
|
|
return res.status(422).send({
|
|
data: {
|
|
message: "Error al iniciar el pago"
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
async Success(req, res) {
|
|
try {
|
|
//Parameters payment
|
|
const { paymentId, PayerID, orderId } = req.body
|
|
const payerId = { 'payer_id': PayerID };
|
|
|
|
//API validation payent and confirnm order
|
|
paypal.payment.execute(paymentId, payerId, async function (error, payment) {
|
|
if (error) {
|
|
return res.status(422).send({
|
|
data: {
|
|
message: "payment not successful"
|
|
}
|
|
})
|
|
} else {
|
|
if (payment.state == 'approved') {
|
|
await db.order_confirm(orderId)
|
|
return res.status(200).send({
|
|
data: {
|
|
id: payment.id,
|
|
message: "payment completed successfully",
|
|
}
|
|
})
|
|
} else {
|
|
return res.status(422).send({
|
|
data: {
|
|
message: "payment not successful"
|
|
}
|
|
})
|
|
}
|
|
}
|
|
});
|
|
|
|
} catch (error) {
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = new PaymentServices();
|