express开发微信公众号

2018-01-28  本文已影响0人  Alander

前言

服务外包需要基于微信公众号的网页开发,开发流程分为两大块内容:

  1. 移动端网页开发
  2. 微信公众号的开发和维护

文章记录后者的开发流程。开发分为以下几个阶段:

  1. 申请微信测试号
  2. 部署自己的服务器
  3. 服务器端代码构建

正文

一、准备自己的服务器并通过微信认证
自己用的阿里云,有学生优惠很便宜。因为在调用所有的微信接口前微信需要验证你是否有一台自己的服务器(或者说是站点),所以我们先要部署服务器。而微信认证服务器时只能通过http或者https即80端口或者443端口所以在部署的时候需要express的如有对 '/' 路由进行操作,即在该路由侠完成验证。
验证规则自行看平台介绍:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319
说一堆这种验证规则其实只是确保你收到的信息确实来自微信,验证是可以进行偷懒地直接返回正确的结果,代码如下:

router.get('/', (req, res, next) => {
  // 认证是无需校验只需返回正确数据即可,若想进行自己校验则在这里进行校验
  // TODO 根据校验规则书写代码,如果正确最后返回req.query.echostr
  res.send(req.query.echostr)
})

二、进行开发
这一部分主要还是根据开发文档来自行书写代码,流程大概为:

  1. 用户产生了输入(不仅是文字输入,也可以是各种点击事件)
  2. 上述输入的信息都会被微信以post的方式将输入的信息以各种形式(json/xml等)发送给你的服务器
  3. 服务器端接受到post请求后验证是否是微信的信息,如果是就解析传来的数据,不是就执行其他代码
  4. 服务器端返回数据(json/xml等)给微信(用户)

解析微信传来的数据
express自带的body-parser可以解析json等数据,但是不能解析xml数据,需要借助第三方组件,可以使用 xml2js 或者是 express-xml-bodyparser,后者专门为express设计,所以才用后者比较方便,具体代码如下:

router.post('/*', xmlparser({trim: false, explicitArray:false}), function(req, res, next) {
  console.log(req.query, req.body)  // 所有的数据都在这了
  res.send(data);
});

例如用户如果发送消息 你好 给公众号了,那么服务器端会收到消息:

{ 
  signature: '0ac3d6aba29e3fb30954104347ee3998198d3a45',
  timestamp: '1517107731',
  nonce: '1381253321',
  openid: 'oEwij0z6VEeRMKKCN21nEaOQgThM' 
}
 { xml:
   { tousername: 'gh_22d306212fea',
     fromusername: 'oEwij0z6VEeRMKKCN21nEaOQgThM',
     createtime: '1517107731',
     msgtype: 'text',
     content: '你好',
     msgid: '6515928089579464821' }
 }

解析完数据后需要给用户返回信息:查看开发文档:

<xml> <ToUserName>< ![CDATA[toUser] ]></ToUserName> <FromUserName>< ![CDATA[fromUser] ]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType>< ![CDATA[text] ]></MsgType> <Content>< ![CDATA[你好] ]></Content> </xml>

其实就是替换其中的数据内容然后让express以xml的形式发送给用户,代码如下:

router.post('/*', xmlparser({trim: false, explicitArray:false}), function(req, res, next) {
  let data = `<xml><ToUserName>${req.body.xml.fromusername}</ToUserName> <FromUserName>${req.body.xml.tousername}</FromUserName> <CreateTime>${req.body.xml.createtime}</CreateTime> <MsgType>${req.body.xml.msgtype}</MsgType> <Content>你好啊!</Content></xml>`
  res.writeHead(200, {'Content-Type': 'application/xml'});
  res.end(data);
});

到这里,基本的开发流程就结束了,文章不是为了详细的教学,而是为了让读者知道如何去使用开发文档和一些自己再摸索的时候得出的经验,之后的开发自己详细看文档就可以进行自己的开发了。

上一篇 下一篇

猜你喜欢

热点阅读