From adf1f3daf925c068465664d2fb66023182e94d4e Mon Sep 17 00:00:00 2001 From: share Date: Tue, 22 Sep 2015 17:03:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=BD=AC=E5=88=B0=E5=AE=A2?= =?UTF-8?q?=E6=9C=8D=E6=A8=A1=E5=BC=8F=E6=97=B6=E6=B2=A1=E6=9C=89=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=95=B0=E6=8D=AE=E5=8A=A0=E5=AF=86=EF=BC=8C=E9=80=A0?= =?UTF-8?q?=E6=88=90=E5=9C=A8=E5=8A=A0=E5=AF=86=E8=AF=B7=E6=B1=82=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E8=BD=AC=E5=88=B0=E5=AE=A2=E6=9C=8D=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/wechat.js | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) 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 () {