weixinpay-sdk
Version:
基于微信官方的原生 API 封装而成的 SDK,将官方要求的 xml 格式均通过 sdk 转换成 JSON 格式方便开发,当前已支持 Native
73 lines (69 loc) • 1.76 kB
JavaScript
const randomString = require('random-string');
const MD5 = require('md5')
const xmlParser = require('./lib/xmlparser')
/**
*
* @param {*} obj 传入的对象
* @return String 返回 xml 字符串
*/
function objToXmlString(obj) {
let xmlreq = '';
if (obj instanceof Object) {
xmlreq = '<xml>';
for (key in obj) {
xmlreq += `<${key}>${obj[key]}</${key}>`
}
xmlreq += '</xml>'
}
return xmlreq;
}
/**
*
* @param {String} xml 待转换的 xml 格式
* @return {JSON} 返回 JSON 对象
*/
function xmlToJson(xml) {
return xmlParser.parser(xml).xml
}
/**
*
* @param Number: number 生成随机字符串的长度,默认为 8
*/
function getRandomString(number) {
number = number | 16;
return randomString({length:number})
}
/**
*
* @param {*} reqData Object:请求参数集
* @param {*} apiKey String:商户 API 私密 key 值
* @param {*} filters Option | Array:要过滤的对象字段
* @return 返回按照微信官网规定的计算 sign 值
*/
function createSign(reqData, apiKey, filters) {
let propArr = [];
for (key in reqData) {
if(reqData[key])
propArr.push(key);
}
if (filters && (filters instanceof Array)) {
propArr = propArr.filter(elm => {
return !filters.includes(elm);
})
}
propArr.sort();
let stringA = '';
propArr.forEach(val => {
stringA += `${val}=${reqData[val]}&`
})
stringA = stringA.slice(0, stringA.length - 1)
let stringSignTemp = stringA + '&key=' + apiKey; // key 为商户平台设置的秘钥 key
let sign = MD5(stringSignTemp).toUpperCase();
return sign;
}
module.exports = {
objToXmlString,
xmlToJson,
getRandomString,
createSign,
}