Generar encabezados firmados
Las solicitudes OpenAPI utilizan cinco encabezados: x-api-key, x-merchant-uid, x-timestamp, x-nonce y x-signature.
- Utilice el mismo mch_ API Key como x-api-key y como secreto de firma.
- La ruta de la firma debe ser únicamente la ruta API, por ejemplo /openapi/payin/orders, sin el dominio.
- La carga útil de la firma es Merchant UID, timestamp, nonce, método, ruta, canónico query y canónico body.
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);