Appearance
Node.js 接入示例
javascript
const crypto = require('crypto');
const axios = require('axios');
class XindaPay {
constructor(token) {
this.apiUrl = 'https://usdt.686869.cloud';
this.token = token;
}
sign(params) {
const filtered = {};
for (const [k, v] of Object.entries(params)) {
if (k !== 'signature' && v !== null && v !== '' && v !== undefined) {
filtered[k] = v;
}
}
const sortedKeys = Object.keys(filtered).sort();
const parts = sortedKeys.map(k => {
let v = filtered[k];
if (typeof v === 'boolean') v = v ? 'true' : 'false';
return `${k}=${v}`;
});
const signStr = parts.join('&') + this.token;
return crypto.createHash('md5').update(signStr).digest('hex').toLowerCase();
}
async createTransaction(params) {
params.signature = this.sign(params);
const res = await axios.post(
`${this.apiUrl}/api/v1/order/create-transaction`,
params,
{ timeout: 30000 }
);
return res.data;
}
verifyCallback(data) {
const received = data.signature || '';
const expected = this.sign(data);
return received === expected;
}
}
(async () => {
const pay = new XindaPay('your_api_token_here');
const result = await pay.createTransaction({
order_id: 'ORDER_' + Date.now(),
amount: 28.88,
fiat: 'CNY',
trade_type: 'usdt.trc20',
notify_url: 'https://your.site/notify',
redirect_url: 'https://your.site/success',
});
console.log(result.data.payment_url);
})();