
微信小程序开发附源码:Koa2 微信公众号开发之消息管
理
Koa2 微信公众号开发之消息管理
一、简介
上一节 Koa2 微信公众号开发(一),我们搭建好了本地调试环境并且接入了微信公众测试号。
这一节我们就来看看公众号的消息管理。并实现一个自动回复功能。
Github 源码: github.com/ogilhinn/ko…
阅读建议:微信公众平台开发文档 mp.weixin.qq.com/wiki
二、接收消息
当普通微信用户向公众账号发消息时,微信服务器将 POST 消息的 XML 数据包到开发者填
写的 URL 上。
2.1 接收普通消息数据格式
XML 的结构基本固定,不同的消息类型略有不同。
用户发送文本消息时,微信公众账号接收到的 XML 数据格式如下所示:
用户发送图片消息时,微信公众账号接收到的 XML 数据格式如下所示:
其他消息消息类型的结构请查阅【微信公众平台开发文档】
对于 POST 请求的处理,koa2 没有封装获取参数的方法,需要通过自己解析上下文 context
中的原生 node.js 请求对象 request。我们将用到 row-body 这个模块来拿到数据。
2.2 先来优化之前的代码
这一节的代码紧接着上一届实现的代码,在上一届的基础上轻微改动了下。
'use strict'
const Koa = require('koa')
const app = new Koa()
const crypto = require('crypto')
// 将配置文件独立到 config.js
const config = require('./config')
app.use(async ctx => {
// GET 验证服务器
if (ctx.method === 'GET') {
const { signature, timestamp, nonce, echostr } = ctx.query
const TOKEN = config.wechat.token
let hash = crypto.createHash('sha1')
const arr = [TOKEN, timestamp, nonce].sort()
hash.update(arr.join(''))
const shasum = hash.digest('hex')
if (shasum === signature) {
return ctx.body = echostr