参考这篇文章http://blog.csdn.net/nogrief/article/details/9774773,发现了一些问题,修正并完善如下:
1、开发环境是bae,nodejs,因此增加日志调试(当然这个日志是给本地测试用的,如果是用bae的日志需要配置地方修改一下,由于牵扯到用户名和密码这里就去除了)
2、validateToken函数的第一个参数是url.parse(req.url,true),而不是req,这块找了不少资料才知道
3、修正了原始代码运行过程中的错误
var http = require('http'); var port = 18080;
var log4js = require('log4js'); { log4js.configure({ appenders: [ { type: 'console' }, //控制台输出 { type: 'file', //文件输出 filename: 'logs/access.log', maxLogSize: 1024, backups:3, category: 'normal' } ] }); var logger = log4js.getLogger('normal'); logger.setLevel('INFO'); }
logger.trace('baev3-log trace log begin');
var url = require('url'); var crypto = require('crypto');
http.createServer(function(req, res) { logger.info('call fun validateToken begin'); validateToken(url.parse(req.url,true),res); logger.info('call fun validateToken end');
function validateToken(req, res) { logger.info('enter fun validateToken'); var query = req.query; var signature = query.signature; logger.info('signature=' + signature); var echostr = query.echostr; logger.info('echostr=' + echostr); var timestamp = query['timestamp']; logger.info('timestamp=' + timestamp); var nonce = query.nonce; logger.info('nonce=' + nonce);
var oriArray = new Array(); oriArray[0] = nonce; oriArray[1] = timestamp; oriArray[2] = "abcdefg"; //这里填写你的token oriArray.sort(); var original = oriArray[0]+oriArray[1]+oriArray[2]; logger.info("Original Str:"+original); logger.info("signature:"+signature); var scyptoString = sha1(original); if (signature == scyptoString) { logger.info("echostr="+echostr); res.end(echostr); } else { logger.info("Bad Token!"); res.end("Bad Token!"); } logger.info('leave fun validateToken'); }
function sha1(str) { var md5sum = crypto.createHash('sha1'); md5sum.update(str); str = md5sum.digest('hex'); return str; }
}).listen(port);