Generate images using signed URLs
Generating images using signed URLs is a bit more technical.
Here's an example using Node.js (JavaScript):
const crypto = require('crypto')
const templateId = 719
const BASE_URL = `https://previewlinks.io/generate/templates/${templateId}/signed`
const apiToken = '<YOUR_API_TOKEN>'
const fields = {
'previewlinks:title': 'Hello from Node.js!',
'previewlinks:image': 'https://previewlinks.io/assets/logo.svg',
}
// Encode fields
const base64Fields = Buffer.from(JSON.stringify(fields)).toString('base64')
// Create a signature using HMAC
const signature = crypto
.createHmac('sha256', apiToken)
.update(base64Fields)
.digest('hex')
const imageUrl = `${BASE_URL}?fields=${base64Fields}&signature=${signature}`
console.log(imageUrl)
Or the same example in PHP:
<?php
$templateId = 719;
$baseUrl = "https://previewlinks.io/generate/templates/{$templateId}/signed";
$apiToken = '<YOUR_API_TOKEN>';
$fields = [
'previewlinks:title' => 'Hello from PHP!',
'previewlinks:image' => 'https://previewlinks.io/assets/logo.svg'
];
$base64Fields = base64_encode(json_encode($fields));
$signature = hash_hmac('sha256', $base64Fields, $apiToken);
echo "{$baseUrl}?fields={$base64Fields}&signature={$signature}";
What is happening?
- We're encoding the fields using first: JSO and then BASE64
- Creating a signature using HMAC which consumes the API encoded fields and API token
- Build a URL with the fields and signature query strings