koa2-wechat2
Version:
koa2 middleware for wechat
150 lines (116 loc) • 3.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.sign = exports.tpl = exports.parseXMLAsync = exports.writeFileAsync = exports.readFileAsync = undefined;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
exports.formatMessage = formatMessage;
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _xml2js = require('xml2js');
var _xml2js2 = _interopRequireDefault(_xml2js);
var _crypto = require('crypto');
var _crypto2 = _interopRequireDefault(_crypto);
var _tpl = require('./tpl');
var _tpl2 = _interopRequireDefault(_tpl);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var readFileAsync = exports.readFileAsync = function readFileAsync(fpath, encoding) {
encoding = encoding || 'utf8';
return new Promise(function (resolve, reject) {
_fs2.default.readFile(fpath, encoding, function (err, content) {
if (err) {
reject(err);
} else {
resolve(content);
}
});
});
};
var writeFileAsync = exports.writeFileAsync = function writeFileAsync(fpath, content) {
return new Promise(function (resolve, reject) {
_fs2.default.writeFile(fpath, content, function (err, content) {
if (err) {
reject(err);
} else {
resolve(content);
}
});
});
};
var parseXMLAsync = exports.parseXMLAsync = function parseXMLAsync(xml) {
return new Promise(function (resolve, reject) {
_xml2js2.default.parseString(xml, { trim: true }, function (err, content) {
if (err) {
reject(err);
} else {
resolve(content);
}
});
});
};
function formatMessage(result) {
var message = {};
if ((typeof result === 'undefined' ? 'undefined' : _typeof(result)) === 'object') {
var keys = Object.keys(result);
for (var i = 0; i < keys.length; i++) {
var item = result[keys[i]];
var key = keys[i];
if (!(item instanceof Array) || item.length === 0) {
continue;
}
if (item.length === 1) {
var val = item[0];
if ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object') {
message[key] = formatMessage(val);
} else {
message[key] = (val || '').trim();
}
} else {
message[key] = [];
for (var j = 0, k = item.length; j < k; j++) {
message[key].push(formatMessage(item[j]));
}
}
}
}
return message;
}
var tpl = exports.tpl = function tpl(content, message) {
var info = {};
var type = 'text';
var fromUserName = message.FromUserName;
var toUserName = message.ToUserName;
if (Array.isArray(content)) {
type = 'news';
}
type = content.type || type;
info.content = content;
info.createTime = new Date().getTime();
info.msgType = type;
info.toUserName = fromUserName;
info.fromUserName = toUserName;
return (0, _tpl2.default)(info);
};
var createNonce = function createNonce() {
return Math.random().toString(36).substr(2, 15);
};
var createTimestamp = function createTimestamp() {
return parseInt(new Date().getTime() / 1000, 10);
};
var _sign = function _sign(noncestr, ticket, timestamp, url) {
var params = ['noncestr=' + noncestr, 'jsapi_ticket=' + ticket, 'timestamp=' + timestamp, 'url=' + url];
var str = params.sort().join('&');
var shasum = _crypto2.default.createHash('sha1');
shasum.update(str);
return shasum.digest('hex');
};
var sign = exports.sign = function sign(ticket, url) {
var noncestr = createNonce();
var timestamp = createTimestamp();
var signature = _sign(noncestr, ticket, timestamp, url);
return {
noncestr: noncestr,
timestamp: timestamp,
signature: signature
};
};