/var/www/greso.tech/server/nsm/controllers/order/payment
Edit: /var/www/greso.tech/server/nsm/controllers/order/payment/cardknox_webhook.js (2963B)
module.exports = function ({ db, logger, config }) {
const { NotFound, BadRequest } = require('../../../responseModels/errors')
const { isSet, isEmail, isPhone, isEmpty, minLength, isNumber } = require('../../../utils/validator.util')
var fs = require('fs');
function format(date) {
if (!(date instanceof Date)) {
throw new Error('Invalid "date" argument. You must pass a date instance')
}
const year = date.getFullYear()
const month = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
const h = String(date.getHours()).padStart(2, '0')
const m = String(date.getMonth()).padStart(2, '0')
const s = String(date.getSeconds()).padStart(2, '0')
return `${year}-${month}-${day} ${h}:${m}:${s}`
}
return async (req, res, next) => {
logger.child({ path: req.path, request: req.query }).info()
let t1 = performance.now()
try {
console.log('CardKnox Webhook Received')
var body = req.body
fs.appendFile(config.api.log_dir + 'cardknox_webhooks.json', format(new Date()) + ": REQ: " + JSON.stringify(req.query) + "\r\nBODY: " + JSON.stringify(body) + "\r\n\r\n", (err) => err && console.error(err));
var {
xAmount,
xEnteredDate,
xInvoice,
xCustom01,
xMaskedCardNumber,
xOrderID,
xRefNum,
xRequestAmount,
xResponseResult,
xToken,
} = body
// res.writeHead(200, {
// 'Context-Type': 'text/plain',
// 'Access-Control-Allow-Origin': '*'
// })
// // load payment
const payment = await db.orderPayment.findOne({
where: { id: xCustom01 }
})
if (payment) {
payment.status = xResponseResult
// payment.error = json['xError']
// payment.errorCode = json['xErrorCode']
payment.summ = xAmount
payment.refNumber = xRefNum
payment.maskedCardNumber = xMaskedCardNumber
payment.token = xToken
payment.response = xResponseResult.toString()
payment.transactionType = 'webhook'
// payment.ipAddress = parseIp(req)
if (xResponseResult == 'Approved') {
// load order
const order = await db.order.findOne({
where: { id: payment.orderId }
})
const inventory = await db.orderInventory.findOne({
where: { id: order.orderInventoryId }
})
if (!inventory) {
throw new BadRequest({
code: 2087,
lang: req.user?.languageCode
})
}
if(inventory.paid == null){
inventory.paid = parseFloat(xAmount)
}else{
inventory.paid = parseFloat(inventory.paid) + parseFloat(xAmount)
}
inventory.due = parseFloat(inventory.total) - inventory.paid
await inventory.save()
payment.confirmed = true
}
await payment.save()
if (order) {
await SERVICES.OrderService.OrderStatus(order, 'orderEdit')
}
}
const time = performance.now() - t1
return res.status(200).json({ status: 'success', time })
} catch (err) {
next(err)
}
}
}