Signature
Last updated
payload + timestamp{
"order_id": "123456",
"amount": "100"
}const crypto = require('crypto');
const data = {
order_id: '123456',
amount: '100'
};
const sortedData = Object.keys(data)
.sort()
.reduce((obj, key) => {
obj[key] = data[key];
return obj;
}, {});
const payload = JSON.stringify(sortedData);
const timestamp = Math.floor(Date.now() / 1000);
const secretKey = 'YOUR_SECRET_KEY';
const signature = crypto
.createHmac('sha256', secretKey)
.update(payload + timestamp)
.digest('hex');
console.log(signature);<?php
$data = [
'order_id' => '123456',
'amount' => '100'
];
function sortPayload($data)
{
if (!is_array($data)) {
return $data;
}
ksort($data);
foreach ($data as $key => $value) {
$data[$key] = sortPayload($value);
}
return $data;
}
$payload = json_encode(
sortPayload($data),
JSON_UNESCAPED_SLASHES
);
$timestamp = time();
$secretKey = 'YOUR_SECRET_KEY';
$signature = hash_hmac(
'sha256',
$payload . $timestamp,
$secretKey
);
echo $signature;import json
import hmac
import hashlib
import time
data = {
"order_id": "123456",
"amount": "100"
}
sorted_data = dict(sorted(data.items()))
payload = json.dumps(
sorted_data,
separators=(',', ':')
)
timestamp = str(int(time.time()))
secret_key = "YOUR_SECRET_KEY"
signature = hmac.new(
secret_key.encode(),
(payload + timestamp).encode(),
hashlib.sha256
).hexdigest()
print(signature)import com.fasterxml.jackson.databind.ObjectMapper;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.*;
public class SignatureGenerator {
public static String generateSignature(
Map<String, Object> data,
String secretKey,
long timestamp
) throws Exception {
TreeMap<String, Object> sortedData = new TreeMap<>(data);
ObjectMapper mapper = new ObjectMapper();
String payload = mapper.writeValueAsString(sortedData);
String signString = payload + timestamp;
Mac sha256Hmac = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(
secretKey.getBytes(),
"HmacSHA256"
);
sha256Hmac.init(secretKeySpec);
byte[] hash = sha256Hmac.doFinal(
signString.getBytes()
);
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
hexString.append(String.format("%02x", b));
}
return hexString.toString();
}
}using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
using Newtonsoft.Json;
class Program
{
static void Main()
{
var data = new SortedDictionary<string, object>
{
{ "order_id", "123456" },
{ "amount", "100" }
};
string payload = JsonConvert.SerializeObject(data);
long timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
string signString = payload + timestamp;
string secretKey = "YOUR_SECRET_KEY";
using(var hmac = new HMACSHA256(
Encoding.UTF8.GetBytes(secretKey)))
{
byte[] hash = hmac.ComputeHash(
Encoding.UTF8.GetBytes(signString)
);
string signature = BitConverter
.ToString(hash)
.Replace("-", "")
.ToLower();
Console.WriteLine(signature);
}
}
}import 'dart:convert';
import 'package:crypto/crypto.dart';
void main() {
Map<String, dynamic> data = {
"order_id": "123456",
"amount": "100"
};
final sortedKeys = data.keys.toList()..sort();
final sortedData = {
for (var key in sortedKeys) key: data[key]
};
String payload = jsonEncode(sortedData);
int timestamp = DateTime.now()
.millisecondsSinceEpoch ~/ 1000;
String secretKey = "YOUR_SECRET_KEY";
String signString = payload + timestamp.toString();
var hmacSha256 = Hmac(
sha256,
utf8.encode(secretKey)
);
var digest = hmacSha256.convert(
utf8.encode(signString)
);
String signature = digest.toString();
print(signature);
}package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"encoding/json"
"fmt"
"time"
)
func main() {
payload := map[string]string{
"order_id": "123456",
"amount": "100",
}
payloadJSON, _ := json.Marshal(payload)
timestamp := fmt.Sprintf("%d", time.Now().Unix())
message := string(payloadJSON) + timestamp
secretKey := "YOUR_SECRET_KEY"
h := hmac.New(sha256.New, []byte(secretKey))
h.Write([]byte(message))
signature := hex.EncodeToString(h.Sum(nil))
fmt.Println(signature)
}