6

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

 3 years ago
source link: https://www.fengxianqi.com/index.php/archives/22/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK