magento-plugin/scripts/send_ipn_for_last_order_cre...

98 lines
2.5 KiB
JavaScript

'use-strict'
var mysql = require('mysql');
var format = require('string-template');
var query = 'select * from bitpay_invoices where quote_id=(select MAX(quote_id) from bitpay_invoices)';
var spawn = require('child_process').spawn;
var config = require('./config.json');
var data = {};
var connection = mysql.createConnection(config.mysql);
function postIpn() {
connection.connect();
connection.query(query, processRows);
}
function send(curl_args) {
var curl = spawn('curl', curl_args);
var stderr;
curl.stdout.on('data', function(data) {
console.log(data.toString());
});
curl.stderr.on('data', function(data) {
stderr = data;
});
curl.on('close', function(code) {
if (code === 0) {
console.log('curl exited successfully');
} else {
console.log('curl exited with an error: ' + stderr);
}
});
}
function processRows(err, rows, fields) {
if (err) {
throw err;
}
var curl_args = [
'-X', 'POST', '-H',
'Content-Type: application/json',
'-H', "Content-Length: {length}",
'-H', 'Connection: close',
'-H', 'Accept: application/json',
'-d', '',
config.host ];
var convertedKeys = convertNames(fields);
var timeRegExp = new RegExp(/.*Time$/);
for (var i=0; i<convertedKeys.length; i++) {
var rowValue = rows[0][fields[i].name];
if (convertedKeys[i] === 'status') {
data[convertedKeys[i]] = config.status;
} else if (convertedKeys[i].match(timeRegExp)) {
data[convertedKeys[i]] = rowValue * 1000;
}
else {
data[convertedKeys[i]] = rowValue;
}
}
data.buyerFields = {};
data.url = 'https://test.bitpay.com:443/invoice?id=' + rows[0].id;
data.posData = '{\"quoteId\":\"' + rows[0].quote_id.toString() + '\"}';
data.btcPaid = data.btcPrice;
data.btcDue = '0.000000';
var jsonPayload = JSON.stringify(data);
curl_args[5] = format(curl_args[5], {length: jsonPayload.length});
curl_args[11] = jsonPayload;
connection.end();
send(curl_args);
}
function convertNames(names) {
var ret = [];
if (!names || typeof names !== 'object' || names.length === 0) {
return ret;
}
for (var j = 0; j < names.length; j++) {
var name = names[j].name;
var converted = name[0];
var i = 1;
while (i < (name.length - 1)) {
if (name[i] === '_') {
converted += name[i+1].toUpperCase();
i = i+2;
} else {
converted += name[i];
i++;
}
}
converted += name[name.length-1];
ret.push(converted);
}
return ret;
}
postIpn();