Skip to main content

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 = 8080
const 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()