virtualPayXml.test.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import test from 'node:test';
  2. import assert from 'node:assert/strict';
  3. import { parseVirtualPayNotifyXml } from '../src/api/virtualPay/virtualPayXml.js';
  4. test('解析 XML 内嵌对象形式的发货通知', () => {
  5. const xml = `<xml>
  6. <Event><![CDATA[xpay_goods_deliver_notify]]></Event>
  7. <OpenId><![CDATA[test-openid]]></OpenId>
  8. <OutTradeNo>202608260001</OutTradeNo>
  9. <Env>1</Env>
  10. <WeChatPayInfo><TransactionId><![CDATA[wx-transaction]]></TransactionId><PaidTime>1770000000</PaidTime></WeChatPayInfo>
  11. <GoodsInfo><ProductId><![CDATA[miaoguo-year]]></ProductId><Quantity>1</Quantity><OrigPrice>36500</OrigPrice><ActualPrice>19900</ActualPrice></GoodsInfo>
  12. </xml>`;
  13. assert.deepEqual(parseVirtualPayNotifyXml(xml), {
  14. Event: 'xpay_goods_deliver_notify',
  15. OpenId: 'test-openid',
  16. OutTradeNo: '202608260001',
  17. Env: '1',
  18. WeChatPayInfo: { TransactionId: 'wx-transaction', PaidTime: '1770000000' },
  19. GoodsInfo: { ProductId: 'miaoguo-year', Quantity: '1', OrigPrice: '36500', ActualPrice: '19900' }
  20. });
  21. });
  22. test('解析 XML 内 JSON 形式的发货通知对象', () => {
  23. const xml = `<xml>
  24. <Event>xpay_goods_deliver_notify</Event>
  25. <GoodsInfo><![CDATA[{"ProductId":"miaoguo-year","Quantity":1,"OrigPrice":36500,"ActualPrice":19900}]]></GoodsInfo>
  26. <WeChatPayInfo><![CDATA[{"TransactionId":"wx-transaction"}]]></WeChatPayInfo>
  27. </xml>`;
  28. const result = parseVirtualPayNotifyXml(xml);
  29. assert.equal(result.GoodsInfo.ProductId, 'miaoguo-year');
  30. assert.equal(result.GoodsInfo.ActualPrice, 19900);
  31. assert.equal(result.WeChatPayInfo.TransactionId, 'wx-transaction');
  32. });