[JavaScript] 纯文本查看 复制代码
const crypto = require('crypto');
// 构建请求体
function buildBody(cfg) {
const body = {
operateId: cfg.operateId,
amount: cfg.amount,
serialNo: cfg.serialNo,
smsCode: cfg.smsCode,
chargeMoney: cfg.chargeMoney,
choseMoney: cfg.choseMoney + '',
pCardNo: cfg.pCardNo || '',
numFlag: cfg.numFlag,
additionOperateId: cfg.additionOperateId,
additionAmount: cfg.additionAmount,
additionType: cfg.additionType,
reConfirmWay: cfg.reConfirmWay,
fkToken: cfg.fkToken,
lastCharOfName: cfg.lastCharOfName,
channel: '11',
payWay: 'SDK',
pointId: cfg.pointId,
pointNum: cfg.pointNum,
pointFee: cfg.pointFee,
invoinceType: cfg.invoinceType,
appUid: cfg.appUid,
uid: cfg.appUid,
appImei: cfg.appImei,
wtAc: cfg.wtAc,
wtAcId: cfg.wtAcId
};
return body;
}
/**
* 生成 payhmcc 与 param
* @param {object} body 请求体
* @param {string} wrapKey 包裹密钥,原代码 _0x4f7a33 = _0x19c413 || '123456',运行时恒为 '123456'
*/
function generate(body, wrapKey = '123456') {
const bodyStr = JSON.stringify(body);
const hmacKey = 'kk9n54Vh2Bc8aXChLHYPTQ==';
const wrapped = wrapKey + bodyStr + wrapKey;
const payhmcc = crypto.createHmac('md5', Buffer.from(hmacKey, 'utf8'))
.update(wrapped, 'utf8').digest('hex');
const param = Buffer.from(bodyStr, 'utf8').toString('base64');
return { payhmcc, param, bodyStr };
}
// ---- 演示 ----
const cfg = {
operateId: '33421',
amount: 100,
serialNo: '202608050001',
smsCode: '123456',
chargeMoney: 99.8,
choseMoney: 100,
numFlag: '1',
additionOperateId: '',
additionAmount: '',
additionType: '',
reConfirmWay: '',
fkToken: null,
lastCharOfName: '',
pointId: null,
pointNum: null,
pointFee: null,
invoinceType: '',
appUid: 'demoUid',
appImei: 'imei',
wtAc: '',
wtAcId: ''
};
const body = buildBody(cfg);
const { payhmcc, param } = generate(body);
console.log('bodyStr =', body);
console.log('payhmcc =', payhmcc, '(长度', payhmcc.length + ')');
console.log('param =', param);
console.log('提交体 =', JSON.stringify({ cellNum: '138xxxx0000', payhmcc, param }));