51 lines
1.5 KiB
JavaScript
51 lines
1.5 KiB
JavaScript
const crypto = require("crypto");
|
|
const models = require("../../models");
|
|
|
|
|
|
function macCalculator(params, key) {
|
|
return crypto.createHmac("sha1", key).update(Object.values(params).join("*")).digest("hex");
|
|
}
|
|
|
|
async function sendPayment(req, res, order) {
|
|
let payment = await models.Payment.create();
|
|
await order.setPayment(payment);
|
|
await payment.reload();
|
|
|
|
let baseUrl = `${req.protocol}://${req.hostname}/order`;
|
|
let config = req.app.get("config").lyfPay;
|
|
let url = config.url + "/Payment.aspx?";
|
|
|
|
let params = {
|
|
lang: "fr",
|
|
version: "v2.0",
|
|
timestamp: Math.floor(payment.date/1000),
|
|
posUuid: config.posUuid,
|
|
shopReference: payment.shopReference,
|
|
shopOrderReference: order.id,
|
|
deliveryFeesAmount: 0,
|
|
amount: order.price*100,
|
|
currency: "EUR",
|
|
mode: "IMMEDIATE",
|
|
onSuccess: baseUrl + "/success",
|
|
onCancel: baseUrl+"/cancel",
|
|
onError: baseUrl+"/error",
|
|
additionalData: JSON.stringify({
|
|
"callBackUrl": baseUrl+"/callback",
|
|
"callBackEmail":config.warningEmail
|
|
}),
|
|
enforcedIdentification: false
|
|
};
|
|
|
|
params.mac = macCalculator(params, config.secureKey);
|
|
params.additionalDataEncoded = Buffer.from(params.additionalData).toString("base64");
|
|
params.additionalData = undefined;
|
|
|
|
url += Object.keys(params)
|
|
.map(k => encodeURIComponent(k) + "=" + encodeURIComponent(params[k]))
|
|
.join("&");
|
|
|
|
res.redirect(307, url);
|
|
}
|
|
|
|
|
|
module.exports = {sendPayment: sendPayment};
|