我想用nodejs,通过微信官方的api,来生成某个微信公众平台的二维码。
调用官方api的时候,有一步需要用post发送请求,于是上网查了些资料,发现一般发送post请求的做法是(下面是简化版代码):
var querystring = require('querystring');
var https = require('https');
var post_data = querystring.stringify({
"name":"BOb",
"age":30,
"job":"teacher"
});
var post_req = https.request(post_opt,function(res){
//some code here
});
post_req.write(post_data);
post_req.end();
然而官方api要求发送的数据是这样的:
{
"action_name": "QR_LIMIT_SCENE",
"action_info": {
"scene": {
"scene_id": 1000
}
}
}
也就是说,调用了querystring.stringify
方法之后,变成了action_name=QR_LIMIT_SCENE&action_info=
。
也因为所给的信息不够,所以官方api会返回报错信息:{"errcode":40052,"errmsg":"invalid action name hint: [WGvPfa0936vr21]"}
,上网查了一下,这个信息说的是发送的post数据,官方api认不出来(认出来才有鬼了,这个信息只有半截的)
对了,取二维码的参考文章:微信公众平台教程之生成带参数二维码
所以我想问,nodejs里,要发送多层object(就是一个object里套着另一个object)的数据的post请求,应该怎么写?
附上小弟代码如不嫌弃可以读一下。。
var https = require('https');
var util = require('util');
var url = require('url');
var querystring = require('querystring');
var ACCESS_TOKEN = "accesstoken就不写出来了";
var urlGetTicket = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token="+ACCESS_TOKEN;
var post_option = url.parse(urlGetTicket);
post_option.method = "POST";
post_option.port = 443;
var post_data = querystring.stringify({
'action_name': 'QR_LIMIT_SCENE',
'action_info': {
'scene': {
'scene_id': 01
}
}
});
post_option.headers = {
'Content-Type' : 'application/x-www-form-urlencoded',
'Content-Length' : post_data.length
};
var post_req = https.request(post_option,function(res){
res.setEncoding('utf8');
res.on('data',function(chunk){
console.log(chunk);
});
});
post_req.write(post_data);
post_req.end();
var server = https.createServer(function(){}).listen('8080');
你可以试试request这个库