// Offline example: prints signed JSON only; never sends an order. import crypto from 'node:crypto'; export function createSign(secretKey,params){ const scalar=value=>typeof value==='object'?JSON.stringify(value):String(value); const body=Object.keys(params||{}).filter(key=>!['sign','cards'].includes(key)&¶ms[key]!==undefined&¶ms[key]!==null&¶ms[key]!=='') .sort().map(key=>`${key}=${scalar(params[key])}`).join('&'); return crypto.createHash('md5').update(`${secretKey}${body}${secretKey}`.toLowerCase(),'utf8').digest('hex'); } const vectors=[ {secret:'FakeSecret#A',params:{dealer_no:'DEMO001',timestamp:1800000000,pageNum:1,pageSize:100}}, {secret:'FakeSecret#A',params:{z:0,a:false,empty:'',nil:null,account:'CaseSensitive',payment_amount:'1.0000',cards:['ignored'],sign:'ignored'}} ]; for(const v of vectors)console.log(JSON.stringify({...v,expected:createSign(v.secret,v.params)}));