Code Snippets 2.x
The following examples are unique for branch 2.x of the API. UDP broadcast remains unchanged.
Authentication
const crypto = require('crypto')const http = require('http')function makeAuthorizationHeader(timestamp, hash) {return `Samport-Keyed-Hash-v1 ${timestamp} ${hash}`}function generateRequestHash(secretKey, timestamp, httpMethod, httpPath, httpContent) {const hashInput = `${secretKey}\n${timestamp}\n${httpMethod}\n${httpPath}\n${httpContent}\n${secretKey}`return crypto.createHash('sha256').update(hashInput, 'utf8').digest('base64')}function generateResponseHash(secretKey, timestamp, httpMethod, httpPath, httpStatus, httpContent) {const hashInput = `${secretKey}\n${timestamp}\n${httpMethod}\n${httpPath}\n${httpStatus}\n${httpContent}\n${secretKey}`console.info('Hash input: ' + hashInput)return crypto.createHash('sha256').update(hashInput, 'utf8').digest('base64')}const terminalIp = '12.232.12.31'const terminalPort = 8080const integrationKey = 'ABCDABCDABCDABCD'const secretKey = 'HelloWorld'const timestamp = new Date().toISOString()const httpVerb = 'POST'const httpPath = '/api/v2/Payments'const content = JSON.stringify({"amounts": {"currencySymbol": "SEK","base": 10050}})const options = {host: terminalIp,port: terminalPort,path: httpPath,method: httpVerb,headers: {'Integration-Key': integrationKey,'Content-Type': 'application/json','Authorization': makeAuthorizationHeader(timestamp, generateRequestHash(secretKey, timestamp, httpVerb, httpPath, content))}}const req = http.request(options, function(response) {let data = ""response.on('data', function(chunk) {data += chunk})response.on('end', function() {const serverAuthorization = response.headers['server-authorization']const serverTimestamp = serverAuthorization.split(' ')[1]const serverHash = serverAuthorization.split(' ')[2]const correctHash = generateResponseHash(secretKey, serverTimestamp, httpVerb, httpPath, response.statusCode, data)console.info('Status: ', response.statusCode)console.info('Headers: ', response.headers)console.info('Content: ' + data)console.info('Server timestamp: ' + serverTimestamp)console.info('Server hash: ' + serverHash)console.info('Correct hash: ' + correctHash)if (serverHash === correctHash) {console.info('Response verified')} else {console.info('Response invalid')}})})req.write(content)req.end()