UNPKG

wechat-payment-node

Version:

微信支付 for nodejs,创建统一支付订单,查询订单,关闭订单,申请退款,查询退款详情,企业付款,即转账到个人微信钱包,查询企业付款详情 Payment API of Weixin (WeChat) for APP and also JSAPI

169 lines (144 loc) 5.52 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _promise = require('babel-runtime/core-js/promise'); var _promise2 = _interopRequireDefault(_promise); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _xml2js = require('xml2js'); var _xml2js2 = _interopRequireDefault(_xml2js); var _md = require('md5'); var _md2 = _interopRequireDefault(_md); var _jssha = require('jssha'); var _jssha2 = _interopRequireDefault(_jssha); var _crypto = require('crypto'); var _crypto2 = _interopRequireDefault(_crypto); var _safeBuffer = require('safe-buffer'); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var utils = function () { function utils() { (0, _classCallCheck3.default)(this, utils); } (0, _createClass3.default)(utils, null, [{ key: 'sign', value: function sign(object, key) { var querystring = utils.createQueryString(object); if (key) querystring += "&key=" + key; return (0, _md2.default)(querystring).toUpperCase(); } }, { key: 'shaSign', value: function shaSign(object) { var querystring = utils.createQueryString(object); var shaObj = new _jssha2.default("SHA-1", 'TEXT'); shaObj.update(querystring); return shaObj.getHash('HEX'); } }, { key: 'createNonceStr', value: function createNonceStr(length) { length = length || 24; if (length > 32) length = 32; var randomStr = Math.random().toString(36); var randomStr2 = Math.random().toString(36); var nonceStr = (randomStr + randomStr2).substr(0, length); return nonceStr; } }, { key: 'createTimestamp', value: function createTimestamp() { return parseInt(new Date().getTime() / 1000) + ''; } }, { key: 'createQueryString', value: function createQueryString(options) { return (0, _keys2.default)(options).filter(function (key) { return options[key] !== undefined && options[key] !== '' && ['pfx', 'apiKey', 'sign', 'key'].indexOf(key) < 0; }).sort().map(function (key) { return key + '=' + options[key]; }).join("&"); } }, { key: 'buildXML', value: function buildXML(json) { var builder = new _xml2js2.default.Builder(); return builder.buildObject(json); } }, { key: 'parseXML', value: function parseXML(xml, fn) { return new _promise2.default(function (resolve, reject) { var parser = new _xml2js2.default.Parser({ trim: true, explicitArray: false, explicitRoot: false }); parser.parseString(xml, function (err, result) { if (err) { reject(err); } else { resolve(result); } }); }); } }, { key: 'parseRaw', value: function parseRaw() { return function (req, res, next) { var buffer = []; req.on('data', function (trunk) { buffer.push(trunk); }); req.on('end', function () { req.rawbody = _safeBuffer.Buffer.concat(buffer).toString('utf8'); next(); }); req.on('error', function (err) { next(err); }); }; } }, { key: 'pipe', value: function pipe(stream, fn) { var buffers = []; stream.on('data', function (trunk) { buffers.push(trunk); }); stream.on('end', function () { fn(null, _safeBuffer.Buffer.concat(buffers)); }); stream.once('error', fn); } }, { key: 'buildQueryStringWithoutEncode', value: function buildQueryStringWithoutEncode(obj) { return obj ? (0, _keys2.default)(obj).sort().map(function (key) { var val = obj[key]; key = key.toLowerCase(); if (Array.isArray(val)) { return val.sort().map(function (val2) { return key + '=' + val2; }).join('&'); } return key + '=' + val; }).join('&') : ''; } }, { key: 'decryptByAes256Cbc', value: function decryptByAes256Cbc(encryptdata, cryptkey) { encryptdata = new _safeBuffer.Buffer(encryptdata, 'base64').toString('hex'); var dec, decipher; decipher = _crypto2.default.createDecipheriv('aes-256-ecb', (0, _md2.default)(cryptkey).toLowerCase(), ''); dec = decipher.update(encryptdata, 'hex', 'utf8'); dec += decipher.final('utf8'); return dec; } }]); return utils; }(); exports.default = utils;