using System.Security.Cryptography;
namespace CrossvileTokenGenerator
public static string SKU = "ASK0210202MOS";
public static string secretKey = "838ENwiLtSEBGfEk2P9KcVSWW4JM33wN";
public static string MaticadBasUrl = @"https://d3dwebapp.maticad.com/ti?token=GENERATED_TOKEN&tileCode=TILE_CODE&manufCode=CROSSVILLE&colorVar=0&enableOffshadedView=true";
public static void Main()
var token = GenerateToken(secretKey);
var newUrl = MaticadBasUrl.Replace("GENERATED_TOKEN", token).Replace("TILE_CODE",SKU);
Console.WriteLine(newUrl);
private static string GenerateToken(string key)
var encoding = Encoding.ASCII;
var tokenType = @"{""alg"": ""HS256"", ""typ"": ""JWT""}";
var expirationTime = DateTimeOffset.Now.AddSeconds(15).ToUnixTimeSeconds();
var payload = $@"{{""tp:tid"": ""CROSSVILLE"", ""tp:gid"": ""0"", ""tp:uid"": ""0"", ""tp:mxp"": ""0"", ""exp"": {expirationTime}}}";
var encodedTokenType = Convert.ToBase64String(encoding.GetBytes(tokenType)).TrimEnd('=');
var encodedPayload = Convert.ToBase64String(encoding.GetBytes(payload)).TrimEnd('=');
var signatureFormat = $"{encodedTokenType}.{encodedPayload}";
var algorithm = new HMACSHA256(encoding.GetBytes(key));
var hash = algorithm.ComputeHash(encoding.GetBytes(signatureFormat));
var signature = Convert.ToBase64String(hash).TrimEnd('=');
return $"{encodedTokenType}.{encodedPayload}.{signature}";