UNPKG

koa2-wechat2

Version:

koa2 middleware for wechat

150 lines (116 loc) 3.97 kB
'use strict'; 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 }; };