nodejs-wechatpay
Version:
微信支付 服务商版本,普通商户版本 nodejs 接口实现 wechatpay apiv2 支付回调
76 lines • 1.95 kB
JavaScript
const crypto = require('crypto');
module.exports = {
lib:{
randomStr:randomStr,
sign:sign,
sign256:sign256,
sign256Xml:sign256Xml,
signXml:signXml,
getsha256:getsha256,
getMd5Str:getMd5Str
}
};
function randomStr(){
return getMd5Str(new Date().toISOString()+ Math.random())
}
function getsha256(key,StringToSign) {
const hmac = crypto.createHmac('sha256', key);
return hmac.update(StringToSign).digest('hex');
}
function getMd5Str(content) {
let md5 = crypto.createHash('md5');
md5.update(content);
let d = md5.digest('hex');
return d;
}
function sign(params,si,key) {
let signname = "sign";
if(si) signname = si;
let paramarray = [];
for (let key of Object.keys(params).sort()) {
if(params[key] !== null){
let p = (key) + "=" + (params[key]);
paramarray.push(p);
}
}
let paramString = paramarray.join("&");
let StringToSign= paramString +"&key=" + key;
let sign = getMd5Str(StringToSign).toUpperCase();
paramString += "&sign=" + sign;
params[signname] =sign;
return params;
}
function sign256(params,key) {
let signname = "sign";
let paramarray = [];
for (let key of Object.keys(params).sort()) {
if(params[key] !== null){
let p = (key) + "=" + (params[key]);
paramarray.push(p);
}
}
let paramString = paramarray.join("&");
let StringToSign= paramString +"&key=" + key
let sign = getsha256(key,StringToSign).toUpperCase();
paramString += "&sign=" + sign;
params[signname] =sign;
return params;
}
function sign256Xml(params,key) {
params = sign256(params,key)
let xml = "<xml>"
for(let k in params){
xml += "<" + k + ">" + params[k] +"</" + k + ">"
}
xml += "</xml>";
return xml;
}
function signXml(params,key) {
params = sign(params,"sign",key)
let xml = "<xml>"
for(let k in params){
xml += "<" + k + ">" + params[k] +"</" + k + ">"
}
xml += "</xml>";
return xml;
}