open-withdrawal-demo/nodejs/demo.js
echo 82c7f3406d init: multi-language OpenAPI demos (java/php/nodejs/python)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-20 13:40:29 +08:00

65 lines
2.0 KiB
JavaScript

#!/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 || '821';
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 <OrderNo>');
process.exit(1);
}
if (cmd === 'balance') {
console.log(JSON.stringify(await post('/api/apiv1/open/withdrawal/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/withdrawal/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: '-',
Payee: '张三',
PayeeNo: '6235753100001261596',
PayeeAddress: '招商银行',
}), null, 2));
} else if (cmd === 'query') {
if (!orderNo) {
console.log('usage: node demo.js query <OrderNo>');
process.exit(1);
}
console.log(JSON.stringify(await post('/api/apiv1/open/withdrawal/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);
});