基于node的微信公众平台,出现 config:invalid signature

错误提示:
clipboard.png

代码:


var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

// var config = require('./config/config.json');
var index = require('./routes/index');
// var users = require('./routes/users');
// var utils = require('./routes/utils');

var app = express();

// view engine setup
// app.set('views', path.join(__dirname, 'views'));
// app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// 微信签名认证
// app.use(utils.sign(config));

app.use('/', index);
// app.use('/users', users);



// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});
module.exports = app;

index.js

// var express = require('express');
// var router = express.Router();

// /* GET home page. */
// router.get('/', function(req, res, next) {
//   res.use(express.static('public'))
// });

// module.exports = router;





var express = require('express');
var crypto = require('crypto');
var router = express.Router();
  
var token = "weixin"; //此处需要你自己修改!
  
/* GET home page. */
router.get('/', function(req, res, next) {
  console.log(req)

    var timestamp = req.query.timestamp;
    var nonce = req.query.nonce;
    var echostr = req.query.echostr;
    var signature = req.query.signature;
    /*  加密/校验流程如下: */
    //1. 将token、timestamp、nonce三个参数进行字典序排序
    var array = new Array(token,timestamp,nonce);
    array.sort();
    var str = array.toString().replace(/,/g,"");
  
    //2. 将三个参数字符串拼接成一个字符串进行sha1加密
    var sha1Code = crypto.createHash("sha1");
    var code = sha1Code.update(str,'utf-8').digest("hex");
  
    //3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
    if(code===signature){
        res.send(signature)
    }else{
        res.send("error");
    }
});
module.exports = router;

index.html

            debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: 'wx52c7cc07ee7f8e7a', // 必填,公众号的唯一标识
            appsecret:'d4624c36b6795d1d99dcf0547af5443d',
            timestamp: '<%= timestamp %>', // 必填,生成签名的时间戳
            nonceStr: '<%= nonceStr %>', // 必填,生成签名的随机串
            signature: '<%= signature %>',// 必填,签名,见附录1
            jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
        });
阅读 2.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题