diff --git a/lib/wechat.js b/lib/wechat.js index 640e585d..a6c428ee 100644 --- a/lib/wechat.js +++ b/lib/wechat.js @@ -238,15 +238,14 @@ var respond = function (handler) { return function (req, res, next) { var message = req.weixin; var callback = handler.getHandler(message.MsgType); - res.reply = function (content) { - res.writeHead(200); - // 响应空字符串,用于响应慢的情况,避免微信重试 - if (!content) { - return res.end(''); - } - var xml = reply(content, message.ToUserName, message.FromUserName, message); + + /** + * 根据条件对返回的XML数据加密 + * @param xml + */ + function encryptXml(xml) { if (!req.query.encrypt_type || req.query.encrypt_type === 'raw') { - res.end(xml); + return xml; } else { // 判断是否已有前置cryptor var cryptor = req.cryptor || handler.cryptor; @@ -255,14 +254,25 @@ var respond = function (handler) { wrap.nonce = parseInt((Math.random() * 100000000000), 10); wrap.timestamp = new Date().getTime(); wrap.signature = cryptor.getSignature(wrap.timestamp, wrap.nonce, wrap.encrypt); - res.end(encryptWrap(wrap)); + return encryptWrap(wrap); } + } + + res.reply = function (content) { + res.writeHead(200); + // 响应空字符串,用于响应慢的情况,避免微信重试 + if (!content) { + return res.end(''); + } + + res.end(encryptXml(reply(content, message.ToUserName, message.FromUserName, message))); }; // 响应消息,转到客服模式 res.transfer2CustomerService = function (kfAccount) { res.writeHead(200); - res.end(reply2CustomerService(message.ToUserName, message.FromUserName, kfAccount)); + + res.end(encryptXml(reply2CustomerService(message.ToUserName, message.FromUserName, kfAccount))); }; var done = function () {