| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import test from 'node:test';
- import assert from 'node:assert/strict';
- import {
- buildV2Sign,
- buildV2Xml,
- normalizeV2Fields,
- parseV2Xml,
- verifyV2Sign
- } from '../src/api/wechatServicePay/wechatPayV2.js';
- test('APIv2 签名与微信官方示例一致', () => {
- const fields = {
- appid: 'wxd930ea5d5a258f4f',
- body: 'test',
- device_info: '1000',
- mch_id: '10000100',
- nonce_str: 'ibuaiVcKdpRxkhJA'
- };
- assert.equal(
- buildV2Sign(fields, '192006250b4c09247ec02edce69f6a2d'),
- '9A0A8659F005D6984697E2CA0A9CF3B7'
- );
- });
- test('APIv2 验签兼容旧 XML 解析器产生的单元素数组', () => {
- const fields = {
- appid: ['wx-test'],
- mch_id: ['123456'],
- nonce_str: ['nonce-test'],
- result_code: ['SUCCESS']
- };
- fields.sign = [buildV2Sign(fields, 'test-key')];
- assert.equal(verifyV2Sign(fields, 'test-key'), true);
- assert.deepEqual(normalizeV2Fields(fields), {
- appid: 'wx-test',
- mch_id: '123456',
- nonce_str: 'nonce-test',
- result_code: 'SUCCESS',
- sign: fields.sign[0]
- });
- });
- test('APIv2 XML 可安全保留中文与特殊字符', () => {
- const original = {
- return_code: 'SUCCESS',
- return_msg: '秒过 & 新手包 <1元>',
- detail: '包含 ]]> 的内容'
- };
- assert.deepEqual(parseV2Xml(buildV2Xml(original)), original);
- });
- test('被修改的 APIv2 字段无法通过验签', () => {
- const fields = { appid: 'wx-test', total_fee: '100', nonce_str: 'nonce-test' };
- fields.sign = buildV2Sign(fields, 'test-key');
- fields.total_fee = '1';
- assert.equal(verifyV2Sign(fields, 'test-key'), false);
- });
|