var CryptoJS = require('crypto-js'); var request = require('request'); var reqJson = { Customer: { //Id: null, Name: 'FirstCustomer Inc', RegNo: '1122334455', NotTDCustomer: false, VatRegNo: '11223344', CurrencyCode: 'EUR', PaymentDeadLine: 7, OverDueCharge: 0, RefNoBase: 1, Address: 'Merimiehenkatu 31', CountryCode: 'FI', County: 'Finland', City: 'Helsinki', PostalCode: '', PhoneNo: '6548765', PhoneNo2: '', HomePage: '', Email: 'customermail@gmail.com', }, DocDate: '20170113131239', DueDate: '20170125131239', InvoiceNo: '123', RefNo: '1232', DepartmentCode: '', ProjectCode: '', InvoiceRow: [ { Item: { Code: 1234567, Description: 'Bag of goldflakes', Type: 3, UOMName: 'kg', }, Quantity: '2', Price: '1000', DiscountPct: 0, DiscountAmount: 0, TaxId: '665f01a4-357a-4a6b-a565-2f17e6e1da13', LocationCode: 1, }, ], TotalAmount: 2000, RoundingAmount: 0, TaxAmount: [{ TaxId: '665f01a4-357a-4a6b-a565-2f17e6e1da13', Amount: 400 }], HComment: '', FComment: '', }; var ApiId = 'Your-api-id'; var ApiKey = 'Your-api-key'; function pad2(n) { return n > 9 ? '' + n : '0' + n; } function getTimestamp() { var d = new Date(); var yyyy = d.getFullYear(); var MM = pad2(d.getMonth() + 1); var dd = pad2(d.getDate()); var HH = pad2(d.getHours()); var mm = pad2(d.getMinutes()); var ss = pad2(d.getSeconds()); return yyyy + MM + dd + HH + mm + ss; } var timestamp = getTimestamp(); var dataString = ApiId + timestamp + JSON.stringify(reqJson); var hash = CryptoJS.HmacSHA256(dataString, ApiKey); var signature = CryptoJS.enc.Base64.stringify(hash); console.log(dataString); console.log(hash); console.log(signature); var url = 'https://aktiva.merit.ee/api/v1/sendinvoice' + '?ApiId=' + ApiId + '×tamp=' + timestamp + '&signature=' + signature; request({ url: url, method: 'POST', json: true, headers: { 'content-type': 'application/json', }, body: reqJson, }, function (request, response) { console.log('Status code: ', response.statusCode, ' -- ', response.statusMessage); console.log('Headers: ', response.headers['content-type']); console.log('Body: ', response.body); } );