Example API call function
Just fill in your public and private keys and you're good to go!
It would probably be a very good idea to keep this file, or at least the API keys, in a directory that is not directly accessible from the web!
<?php
// NOTE: This function requires cURL to be available to PHP.
function lyyti_apiCall($call_string, $http_method = 'GET', $payload = null)
{
// Generate the signature based on the API keys
$public_key = 'apitesti';
$private_key = 'asdasdasd123';
$timestamp = time();
$signature = hash_hmac(
'sha256',
base64_encode($public_key.','.$timestamp.','.$call_string),
$private_key
);
// Set the required HTTP headers
$http_headers = array(
'Accept: application/json; charset=utf-8',
'Authorization: LYYTI-API-V2 public_key='.$public_key.', timestamp='.$timestamp.', signature='.$signature
);
// Initialize the cURL connection
$curl = curl_init('https://api.lyyti.com/v2/'.$call_string);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// Handle HTTP method and payload
if ($http_method != 'GET' && isset($payload))
{
if ($http_method == 'PATCH')
{
$http_headers[] = 'Content-Type: application/merge-patch+json';
}
else
{
$http_headers[] = 'Content-Type: application/json; charset=utf-8';
}
if ($http_method == 'POST')
{
curl_setopt($curl, CURLOPT_POST, true);
}
else
{
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $http_method);
}
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($payload));
}
// Set the HTTP headers and execute the call
curl_setopt($curl, CURLOPT_HTTPHEADER, $http_headers);
$result_json = curl_exec($curl);
// Check for errors
if ($curl_errno = curl_errno($curl))
{
return array('curl_error' => array('errno' => $curl_errno, 'message' => curl_strerror($curl_errno)));
}
curl_close($curl);
// Turn the resulting JSON into a PHP associative array and return it
$result_array = json_decode($result_json, $assoc = true);
return $result_array;
}
?>
// Replace this with whatever you need to do with the results
function resultsHandler(input) {
// If you use the ?as_array=1 parameter in the API call, the resulting
// object will have an array named "results" as a property
input.results.forEach(function(oneResult) {
console.log(oneResult);
console.log("\n");
});
}
function lyyti_apiCall(call_string, callbackFunction) {
// Store these somewhere safe and smart
var public_key = 'apitesti';
var private_key = 'asdasdasd123';
var CryptoJS = require('crypto-js'); // npm install crypto-js
var Base64 = require('js-base64').Base64; // npm install js-base64
var HTTPS = require('https');
var timestamp = Math.floor(new Date()/1000);
var signature = CryptoJS.HmacSHA256(
Base64.encode(public_key+','+timestamp+','+call_string),
private_key
).toString(CryptoJS.enc.Hex);
var options = {
hostname: 'api.lyyti.com',
path: '/v2/'+call_string,
method: 'GET',
headers: {
'Accept': 'application/json; charset=utf-8',
'Authorization': 'LYYTI-API-V2 public_key='+public_key+', timestamp='+timestamp+', signature='+signature
}
};
var request = HTTPS.get(options, function (response) {
var buffer = '';
response.on('data', function (chunk) {
buffer += chunk;
});
response.on('end', function (err) {
// This is an example, it's probably better to use promises, async/await, or something similar here
callbackFunction(JSON.parse(buffer));
});
});
}
// Use the as_array=1 parameter to get the results as an array rather than object
lyyti_apiCall('events?as_array=1', resultsHandler);
# .NET version using PowerShell (save as a .ps1 file)
# Credits to: https://github.com/kabtoffe
$script:LyytiPublicKey = "apitesti"
$script:LyytiPrivateKey = "asdasdasd123"
$script:LyytiAPIBaseUrl = "https://api.lyyti.com/v2/"
function Get-UnixTimeStamp{
param([DateTime]$DateTime)
$DateTime = $DateTime.ToUniversalTime()
Get-Date -Date $DateTime -UFormat %s -Millisecond 0
}
function Get-StringFromBytes{
param([byte[]]$Bytes)
$sbinary = ""
for ($i = 0; $i -lt $Bytes.Length; $i++){
$sbinary += $Bytes[$i].ToString("X2")
}
$sbinary
}
function Get-LyytiSignatureHash{
param(
[DateTime]$Timestamp,
[string]$UnixTimeStamp,
[string]$Callstring
)
if ($UnixTimeStamp -eq $null){
$UnixTimeStamp = Get-UnixTimeStamp -DateTime $Timestamp
}
$message = "$LyytiPublicKey,$UnixTimeStamp,$Callstring"
$secret = $LyytiPrivateKey
Write-Verbose "Message: $message"
$hmacsha = New-Object System.Security.Cryptography.HMACSHA256
$hmacsha.key = [Text.Encoding]::UTF8.GetBytes($secret)
$MessageBytes = [Text.Encoding]::UTF8.GetBytes($message)
$MessageBase64 = [Convert]::ToBase64String($MessageBytes)
$MessageBase64Bytes = [Text.Encoding]::UTF8.GetBytes($MessageBase64)
$SignatureHash = $hmacsha.ComputeHash($MessageBase64Bytes)
$Signature = Get-StringFromBytes -Bytes $SignatureHash
$Signature.ToLower()
}
function Get-LyytiAuthHeader{
param($CallString)
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$UnixTimeStamp = Get-UnixTimeStamp ([DateTime]::Now)
$SignatureHash = Get-LyytiSignatureHash -UnixTimeStamp $UnixTimeStamp -Callstring $CallString
$headers.Add("Accept", "application/json; charset=utf-8")
$AuthHeader = "LYYTI-API-V2 public_key=$LyytiPublicKey, timestamp=$UnixTimeStamp, signature=$SignatureHash"
Write-Verbose $AuthHeader
$headers.Add("Authorization", $AuthHeader)
$headers
}
function Invoke-LyytiApiCall{
param($CallString, $Body)
$header = Get-LyytiAuthHeader -CallString $CallString
if ($Body -ne $null){
Invoke-RestMethod -Method POST -Uri "$LyytiAPIBaseUrl$CallString" -Headers $header -Body $Body
}
else{
Invoke-RestMethod -Method GET -Uri "$LyytiAPIBaseUrl$CallString" -Headers $header
}
}
Updated over 4 years ago