Générer des en-têtes signés
Les requêtes OpenAPI utilisent cinq en-têtes : x-api-key, x-merchant-uid, x-timestamp, x-nonce et x-signature.
- Utilisez le même mch_ API Key comme clé x-api et comme secret de signature.
- Le chemin de signature doit être uniquement le chemin API, par exemple /openapi/payin/orders, sans le domaine.
- La charge utile de signature est Merchant UID, timestamp, nonce, méthode, chemin, canonique query et canonique 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);