Gerar cabeçalhos assinados
As solicitações OpenAPI usam cinco cabeçalhos: x-api-key, x-merchant-uid, x-timestamp, x-nonce e x-signature.
- Use o mesmo mch_ API Key como x-api-key e o segredo de assinatura.
- O caminho da assinatura deve ser apenas o caminho API, por exemplo /openapi/payin/orders, sem o domínio.
- A carga útil da assinatura é Merchant UID, timestamp, nonce, método, caminho, query canônico e body canônico.
import { createHmac, randomBytes } from 'node:crypto';
function required(name) {
const value = process.env[name]?.trim();
if (!value) throw new Error(name + ' is required');
return value;
}
const uid = "880001", key = "mch_xxxxxxxxxxxxxxxxxxxx";
const timestamp = "1776193200000", nonce = "2f5c7b147c3748f0a8b3d9bb38aa91a4";
const method = 'POST', path = '/openapi/payin/orders';
const canonicalQuery = '', canonicalBody = "{\"amount\":\"100.00\",\"chainCode\":\"TRON\",\"merchantOrderNo\":\"M202604150001\",\"notifyUrl\":\"https://merchant.example.com/api/uugate/payin-notify\",\"tokenSymbol\":\"USDT\"}";
const payload = [uid, timestamp, nonce, method, path, canonicalQuery, canonicalBody].join('\n');
const signature = createHmac('sha256', key).update(payload, 'utf8').digest('hex');
console.log(signature);