#!/usr/bin/env node 'use strict'; const { buildSign } = require('./sign'); const BASE_URL = (process.env.BASE_URL || 'https://example.com').replace(/\/$/, ''); const ACCESS_KEY = process.env.ACCESS_KEY || 'your_access_key'; const SECRET_KEY = process.env.SECRET_KEY || 'your_secret_key'; const PAY_CHANNEL_ID = process.env.PAY_CHANNEL_ID || '3084'; async function post(path, body) { const payload = { ...body, Sign: buildSign(body, SECRET_KEY) }; const res = await fetch(BASE_URL + path, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload), }); return res.json(); } async function main() { const [cmd, orderNo] = process.argv.slice(2); if (!cmd) { console.log('usage: node demo.js balance|submit|query '); process.exit(1); } if (cmd === 'balance') { console.log(JSON.stringify(await post('/api/apiv1/open/pay/querybalance', { Timestamp: Math.floor(Date.now() / 1000), AccessKey: ACCESS_KEY, }), null, 2)); } else if (cmd === 'submit') { const OrderNo = `OrderNo${Math.floor(Date.now() / 1000)}`; console.log(JSON.stringify(await post('/api/apiv1/open/pay/submit', { Timestamp: Math.floor(Date.now() / 1000), AccessKey: ACCESS_KEY, PayChannelId: PAY_CHANNEL_ID, OrderNo, Amount: '100.01', CallbackUrl: 'https://xxxxx.com/xxxx/callback', Ext: '-', Payer: '张三', PayerNo: '123456789@qq.com', PayerAddress: '支付宝', }), null, 2)); } else if (cmd === 'query') { if (!orderNo) { console.log('usage: node demo.js query '); process.exit(1); } console.log(JSON.stringify(await post('/api/apiv1/open/pay/queryorder', { Timestamp: Math.floor(Date.now() / 1000), AccessKey: ACCESS_KEY, OrderNo: orderNo, }), null, 2)); } else { console.log('unknown command:', cmd); process.exit(1); } } main().catch((e) => { console.error(e); process.exit(1); });