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代碼加密,加密后的代碼效果: