nodejs实现:支付宝订单查询;
原生http请求,不使用三方库;
代码如下:
const https = require('https');
const crypto = require('crypto');
const querystring = require('querystring');// 支付宝公共参数
const PRIVATE_KEY = "..."; // 替换为你的应用私钥
const APP_ID = '...'; // 替换为你的应用IDconst CHARSET = 'utf-8';
const FORMAT = 'json';
const SIGN_TYPE = 'RSA2';
const VERSION = '1.0';
const METHOD = 'alipay.trade.query';
const TIMESTAMP = new Date().toISOString().replace(/T/, ' ').substring(0, 19);
const NOTIFY_URL = 'http://your.notify.url'; // 替换为你设置的通知URL,也可不设置// 请求参数
const bizContent = {out_trade_no: '321321', // 商户订单号
};// 构建请求参数
const params = {app_id: APP_ID,method: METHOD,format: FORMAT,charset: CHARSET,sign_type: SIGN_TYPE,timestamp: TIMESTAMP,version: VERSION,notify_url: NOTIFY_URL,biz_content: JSON.stringify(bizContent),
};// 生成签名
const sign = generateSign(params, PRIVATE_KEY);// 添加签名到请求参数
params.sign = sign;// 发送请求
const options = {hostname: 'openapi.alipay.com',port: 443,path: '/gateway.do?' + querystring.stringify(params),method: 'POST',
};const req = https.request(options, res => {let data = '';res.on('data', chunk => {data += chunk;});res.on('end', () => {console.log(JSON.parse(data));});
});req.end();// 生成签名函数
function generateSign(params, privateKey) {// 对参数进行排序const sortedParams = Object.keys(params).sort().reduce((obj, key) => ((obj[key] = params[key]), obj), {});// 构建签名串let str = '';for (const key in sortedParams) {str += `${key}=${sortedParams[key]}&`;}str = str.slice(0, -1);// 签名const signer = crypto.createSign('RSA-SHA256');signer.update(str);return signer.sign(privateKey, 'base64');
}
执行效果:
可以获取到订单号、购买方信息、金额、支付是否成功等详细信息。
这是nodejs代码,如果是要部署在非信赖环境中、避免它人拿到代码,可以用JShaman、JS-Obfuscator、JsJiaMi.online等工具进行JS代码加密,加密后的代码效果: