开发微信公众号里面的设备功能项,添加硬件设备获取到二维码,扫描后会出现绑定事件,点击绑定时,微信公众平台会向服务器发送post请求并且发送一条json数据,但为什么我创建的服务器不能接受到这条json数据呢?下面是我服务器的代码:
var express = require('express');
var crypto = require('crypto');
var xml = require('node-xml');
var querystring = require('querystring');
var xml2js = require('xml2js');
var router = express.Router();
//var parseString=require('xml2js').parseString;
var token = "token"; //此处需要你自己修改!
var parser = new xml2js.Parser();
var http = require('http');
var qs = require('querystring');
/* GET home page. */
router.get('/', function(req, res, next) {
var signature = req.query.signature;
console.log(signature);
var timestamp = req.query.timestamp;
var nonce = req.query.nonce;
var echostr = req.query.echostr;
/* 加密/校验流程如下: */
//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(echostr)
} else {
res.send("error");
}
});
router.post('/', function(req, res) {
// console.log('req is :' + req.toString());
var post_data = "";
req.on("data", function(data) {
console.log('JSON post_data is :' + data.toString());
// parseString(data,function (err,result) {
// console.log(JSON.stringify(result));
// });
post_data = data;
parser.parseString(data, function(err, result) {
//将对象转换成字符串输出
console.log('JSON数据为:' + JSON.stringify(result));
console.log('fdfsfgdgfgrtg');
});
});
res.send('thanks you for you message');
req.on("end", function() {
/// console.log('JSON post_data is :' + JSON.parse(post_data));
var xmlStr = post_data.toString('utf-8', 0, post_data.length);
console.log("接受道德消息未" + xmlStr);
});
});
//
module.exports = router;
跪求解答,真的是要把我憋疯了!!
post的不是xml数据吗?
post_data需要链接起来的
在req.on里面post_data += data;
这样就有了 然后你解析出来