const crypto = require('crypto');
function generateAlipaySignature(params, privateKey) {
const sortedParams = Object.keys(params).sort().reduce((obj, key) => {
obj[key] = params[key];
return obj;
}, {});
const signString = Object.entries(sortedParams).map(([key, value]) => `${key}=${value}`).join('&');
const signer = crypto.createSign('RSA-SHA256');
signer.update(signString);
const signature = signer.sign(privateKey, 'base64');
return signature;
}
// Example usage:
const params = {
app_id: '1234567890',
timestamp: '2023-02-24 12:34:56',
out_trade_no: 'ORD123456789',
total_amount: '99.99',
product_code: 'FAST_INSTANT_TRADE_PAY',
};
const privateKey = '-----BEGIN PRIVATE KEY-----\nABCDEF123456789\n-----END PRIVATE KEY-----';
const signature = generateAlipaySignature(params, privateKey);
console.log(signature);
这段代码使用 Node.js 内置的 crypto 模块生成 RSA-SHA256 签名。首先,传入的参数对象按照键名排序,然后将键值对用 & 符号连接起来,生成待签名的字符串。接着,使用私钥对待签名字符串进行签名,最后将签名以 Base64 编码的形式返回。
在示例中,我们假设支付宝应用的 App ID 为 1234567890,订单号为 ORD123456789,订单总金额为 99.99 元,支付方式为即时到账,时间戳为 2023-02-24 12:34:56。私钥也是示例,实际使用中需要替换为真实的私钥。