创建订单
请求地址:http://orderapi.liangtouyang.com/api/orders/pay
请求名 | 类型 | 参考值 | 备注 | |
appid | String | 100010000 | 后台应用中心获取 | |
type | int | 0 | 0:微信支付 1:支付宝支付 | |
out_trade_no | string | Y1234567989 | 用户订单号 | |
money | string | 1.00 | 付款金额,注意必须是标准的金额格式如1.00 1.01 | |
notify_url | string | 可填可不填 不填则用后台应用内设置的为准 | ||
device | int | 1 | 1:电脑 2:手机 填写的类型会利于接口的返回类型 | |
sign | string | 32位的MD5加密字符串 |
|
计算签名
const crypto = require('crypto');
function generateSign(params, secretKey) {
// 移除 'sign' 参数
delete params.sign;
// 按键名排序
const sortedKeys = Object.keys(params).sort();
// 拼接字符串
const paramString = sortedKeys.map(key => `${key}=${params[key]}`).join('&');
// 在拼接的字符串后面加上密钥
const stringToSign = paramString + secretKey;
// 计算MD5签名
const hash = crypto.createHash('md5').update(stringToSign).digest('hex');
return hash;
}
// 示例数据
const params = {
appid: '100010000',
type: 0,
out_trade_no: 'Y1234567989',
money: '1.00',
notify_url: '',
device: 1
};
const secretKey = 'your_secret_key_here';
// 生成签名
const sign = generateSign(params, secretKey);
console.log(sign);
查询订单
请求地址:http://orderapi.liangtouyang.com/api/orders/query
请求名 | 类型 | 参考值 | 备注 | |
appid | string | 100010000 | 后台应用处获取 | |
out_trade_no | string | Y123456789 | 用户自己订单号 (二选一) | |
trade_no | string | R201400000000000000 | 平台订单号(二选一) |
查询订单 无需sign计算
验证回调签名
const crypto = require('crypto');
const querystring = require('querystring');
function verifyCallbackSignature(data, secretKey) {
// 提取签名
const signature = data.sign;
delete data.sign;
// 排序参数
const sortedKeys = Object.keys(data).sort();
// 拼接字符串
const paramString = sortedKeys.map(key => `${key}=${data[key]}`).join('&');
// 在拼接的字符串后面加上密钥
const stringToSign = paramString + secretKey;
// 计算MD5签名
const computedSignature = crypto.createHash('md5').update(stringToSign).digest('hex');
// 验证签名
return signature === computedSignature;
}
// 假设获取到的回调数据
const urlData = 'data=%7B%22appid%22%3A100100001%2C%22time%22%3A1713760397%2C%22amount%22%3A%221.100%22%2C%22status%22%3A1%2C%22out_trade_no%22%3A%22y1713760297%22%2C%22trade_no%22%3A%22R240422123135450090%22%2C%22sign%22%3A%22a7762b869a349409616ed4cbc5018dae%22%7D';
const data = JSON.parse(decodeURIComponent(querystring.parse(urlData).data));
const secretKey = 'your_secret_key_here';
// 验证签名
const isValid = verifyCallbackSignature(data, secretKey);
console.log(isValid ? '签名验证通过' : '签名验证失败');
进件地址:两头羊支付