这些天学习nodejs,想着一边学习一边结合微信公众号做一个小项目,这样或许理解能更深刻些。搜索发现其实有
nodejs开发微信的例子其实还是挺多的,但用koa的挺少,难免有些坑要自己踩。
第一步接入微信很简单,但是要获取微信post的数据时就遇到问题了。
在koa中,或者说koa-bodyParser中,默认只支持解析application/json
, application/x-www-form-urlencoded
, 以及 multipart/form-data
,也就是说不支持对 XML 形式的包体进行解析。
而微信服务器发送的post数据就是xml格式的。。。
在php中可以用
file_get_contents("php://input");
//或者
$GLOBALS['HTTP_RAW_POST_DATA']
获得post的数据。
但在nodejs中无论我怎么打印ctx.request
对象,都找不到所谓的xml数据在哪,欲哭无泪。
在找了一个下午后,终于让我找到方法了。
方法就是————————————————安装koa-xml-body
的npm。
居然这么简单,加多一个解析就行了,完全没有想到。
用法:
var koa = require('koa');
var xmlParser = require('koa-xml-body').default; // note the default
var bodyParser = require('koa-bodyparser');
var app = koa();
app.use(xmlParser());
app.use(bodyParser());
然后就可以通过ctx.request.body.xml
获取就行了。
比如:
var postObj = ctx.request.body.xml;
console.log(JSON.stringify(postObj));
///数据类似下面:
{
"URL":["http://fengxianqi.com"],
"ToUserName":["xianqi12"],
"FromUserName":["xianqi12"],
"CreateTime":["123456789"],
"MsgType":["event"],
"Event":["subscribe"],
"Latitude":[""],
"Longitude":[""],
"Precision":[""],
"MsgId":["1"]
}
(完)
「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」
(๑>ڡ<)☆谢谢老板~
使用微信扫描二维码完成支付