Copy #include <iostream>
#include <map>
#include <string>
#include <algorithm>
#include <openssl/hmac.h>
#include <iomanip>
#include <sstream>
std::map<std::string, std::string> create_test_params() {
return {
{"amount", "999"},
{"cashierId", "91"},
{"chainId", "11155111"},
{"custNo", "cust00001"},
{"fromAddress", "0xa9e358e33a57e67c9b84618a52f0194c345c8e35"},
{"id", "8210003764"},
{"network", "Ethereum"},
{"status", "9"},
{"symbol", "USDT"},
{"txId", "0x1da59f33aa6f6b435514126e26d5622c3e377e4762579aa0ac0130139625853d"}
};
}
std::string build_sign_payload(std::map<std::string, std::string> params, std::string time) {
std::string payload;
for (const auto& [key, value] : params) {
if (!payload.empty()) payload += "&";
payload += key + "=" + value;
}
return payload + "&time=" + time;
}
std::string calculate_hmac_sha256_hex(const std::string& secret, const std::string& message) {
unsigned char hash[EVP_MAX_MD_SIZE];
unsigned int len = 0;
HMAC_CTX* ctx = HMAC_CTX_new();
HMAC_Init_ex(ctx, secret.c_str(), secret.length(), EVP_sha256(), NULL);
HMAC_Update(ctx, (unsigned char*)message.c_str(), message.length());
HMAC_Final(ctx, hash, &len);
HMAC_CTX_free(ctx);
std::stringstream ss;
for(unsigned int i = 0; i < len; i++) {
ss << std::hex << std::setw(2) << std::setfill('0') << (int)hash[i];
}
return ss.str();
}
int main() {
auto params = create_test_params();
std::string request_time = "1743060268000";
std::string api_key = "sck_QOoPSlHDSsgXYeNyTP2i0ug1HKLRjHw9Ug7mCc1Q0";
std::string payload = build_sign_payload(params, request_time);
std::cout << "[Debug] Payload String:\n" << payload << "\n\n";
std::string signature = calculate_hmac_sha256_hex(api_key, payload);
std::cout << "[Result] Final Signature:\n" << signature << std::endl;
return 0;
}