用koa获取微信服务器post请求的数据

本文共有1310个字,关键词:nodejskoa微信微信开发

这些天学习nodejs,想着一边学习一边结合微信公众号做一个小项目,这样或许理解能更深刻些。搜索发现其实有wechat的npm的可以直接用的,完全针对微信开发。但我想着当成一个网站来做,用直接用微信的npm有些太直接,对底层交互了解就少了,有违我的初衷。于是,我结合koa框架来搭建我的微信服务器。

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"]
}

(完)

「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」

fengxianqi

(๑>ڡ<)☆谢谢老板~

使用微信扫描二维码完成支付

版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。
添加新评论
暂无评论