微信公众平台消息接口服务中间件

升级注意事项

支持 Koa2

如果仍然使用 Koa1,请使用co-wechat@1.x。

middleware 方法变更

middleware() 方法接受一个 async function 作为参数。

app.use(wechat(config).middleware(async (message, ctx) => {// TODO
}));

上下文与返回值变更

现在的上下文不再是原始的 请求上下文,而仅仅是 message 对象。

业务的返回值现在直接返回即可,无需关注上下文。比如:

async (message, ctx) => {return 'Hello world!';
}

取消 session 的支持

不再支持 session 的功能。如需使用 session 功能,建议使用 redis 自行处理逻辑,取 message.FromUserName 作为 key,取一个合适的 ttl 时间即可。

功能列表

  • 自动回复(文本、图片、语音、视频、音乐、图文)

Installation

$ npm install co-wechat

Use with koa2

const wechat = require('co-wechat');const config = {token: 'THE TOKEN',appid: 'THE APPID',encodingAESKey: 'THE ENCODING AES KEY'
};app.use(wechat(config).middleware(async (message, ctx) => {// 微信输入信息就是这个 messageif (message.FromUserName === 'diaosi') {// 回复屌丝(普通回复)return 'hehe';} else if (message.FromUserName === 'text') {//你也可以这样回复text类型的信息return {content: 'text object',type: 'text'};} else if (message.FromUserName === 'hehe') {// 回复一段音乐return {type: "music",content: {title: "来段音乐吧",description: "一无所有",musicUrl: "http://mp3.com/xx.mp3",hqMusicUrl: "http://mp3.com/xx.mp3"}};} else if (message.FromUserName === 'kf') {// 转发到客服接口return {type: "customerService",kfAccount: "test1@test"};} else {// 回复高富帅(图文回复)return [{title: '你来我家接我吧',description: '这是女神与高富帅之间的对话',picurl: 'http://nodeapi.cloudfoundry.com/qrcode.jpg',url: 'http://nodeapi.cloudfoundry.com/'}];}
}));

备注:token 在微信平台的开发者中心申请

开启调试模式(用于微信公众平台接口调试工具调试)

//构造函数的第二个函数isDebug参数,为true或别的正值时表示开启,推荐用配置或是环境变量的方式传参
wechat(config, true)

配置成debug模式后,用微信公众平台接口调试工具发送POST请求(比如消息接口调试-文本消息)时返回结果不会提示Invalid signature

回复消息

当用户发送消息到微信公众账号,自动回复一条消息。这条消息可以是文本、图片、语音、视频、音乐、图文。详见:官方文档

回复文本

async (message, ctx) => {return 'Hello world!';
}
// 或者
async (message, ctx) => {return {type: "text", content: 'Hello world!'};
}

回复图片

async (message, ctx) => {return {type: "image",content: {mediaId: 'mediaId'}};
}

回复语音

async (message, ctx) => {return {type: "voice",content: {mediaId: 'mediaId'}};
}

回复视频

async (message, ctx) => {return {type: "video",content: {mediaId: 'mediaId',thumbMediaId: 'thumbMediaId'}};
}

回复音乐

async (message, ctx) => {return {title: "来段音乐吧",description: "一无所有",musicUrl: "http://mp3.com/xx.mp3",hqMusicUrl: "http://mp3.com/xx.mp3"};
}

回复图文

async (message, ctx) => {return [{title: '你来我家接我吧',description: '这是女神与高富帅之间的对话',picurl: 'http://nodeapi.cloudfoundry.com/qrcode.jpg',url: 'http://nodeapi.cloudfoundry.com/'}];
}

回复空串

async (message, ctx) => {return '';
}

转发到客服接口

async (message, ctx) => {return {type: "customerService",kfAccount: "test1@test" //可选};
}

集成到 Egg.js

路由设置

// app/router.js
'use strict';module.exports = app => {// 将 get/post 请求都转给 home.wechatapp.all('/', 'home.wechat');
};

控制器

'use strict';const wechat = require('co-wechat');module.exports = app => {class HomeController extends app.Controller {}// 因为 Egg 需要用类的形式来组织,而 wechat 是通过 middleware 方法来生成中间件HomeController.prototype.wechat = wechat({token: 'token',appid: 'appid',encodingAESKey: ''}).middleware(async (message, ctx) => {// TODO});return HomeController;
};

相同路由支持多账号

// app/router.js
'use strict';module.exports = app => {// 将 get/post 请求都转给 home.wechatapp.all('/wechat/:appid', 'home.prehandle', 'home.wechat');
};

在前置中间件中预先设置 ctx.wx_token 或 ctx.wx_cryptor:

'use strict';const WXBizMsgCrypt = require('wechat-crypto');
const wechat = require('co-wechat');module.exports = app => {class HomeController extends app.Controller {async prehandle(ctx, next) {const appid = ctx.params.appid;const token = getTokenByAppid(appid);ctx.wx_token = token// 或者const encodingAESKey = getEncodingAESKeyByAppid(appid);ctx.wx_cryptor = new WXBizMsgCrypt(token, encodingAESKey, appid);await next();}}HomeController.prototype.wechat = wechat({// 当有前置中间件设置 ctx.wx_token 和 ctx.wx_cryptor 时,这里配置随意填写// token: 'token',// appid: 'appid',// encodingAESKey: ''}).middleware(async (message, ctx) => {// TODO});return HomeController;
};

注意,上述的 getTokenByAppid 和 getEncodingAESKeyByAppid 方法根据自己情况请自行提供。

欢迎关注。

代码:https://github.com/JacksonTian/api-doc-service

你可以在CloudFoundry、appfog、BAE等搭建自己的机器人。

详细API

原始API文档请参见:消息接口指南。

转自https://github.com/node-webot/co-wechat#readme

co-wechat 微信公众平台消息接口服务中间件相关推荐

  1. 微信公众平台消息接口开发(1)

    原文链接 现在微信很热,微信公众平台的应用也很热,其实微信公众平台消息接口开发并不难,只要有接口调用就OK了. 要开发微信公众平台上的应用,得准备什么呢? 至少要有一个公众账号.服务器.域名这三样东西 ...

  2. 微信公众平台消息接口星标功能

    [微信公众平台星标功能接口被撤销]微信公众平台消息接口中的星标功能,被悄悄的去掉了. 原因应该是有的账号在程序中大量使用星标功能,造成微信服务器存储记录过于宠大. 现在要继续使用星标功能,只能在后台手 ...

  3. 微信公众平台消息接口开发(13)多语种互译

    微信公众平台消息接口 微信公众平台API 微信开发模式 多语种翻译 多语言互译 Microsoft Translator 方倍工作室 Paraphrase API 10 out of 11 rated ...

  4. 微信公众平台消息接口API指南

    下述文档已过期,更加完整及详细的请访问  http://www.cnblogs.com/txw1958/p/wechat-tutorial.html 简介 微信公众平台消息接口为开发者提供了一种新的消 ...

  5. 微信公众平台消息接口开发(2)-封装weixin.class.php

    微信公众平台消息接口开发(2)-封装weixin.class.php 一.封装weixin.class.php 由于微信公众平台的通信使用的是特定格式的XML数据,每次接受和回复都要去做一大堆的数据处 ...

  6. 微信公众平台消息接口开发(34)微信墙之表白墙/婚礼墙/晚会墙/会议墙/晒单墙/照片墙/历史墙...

    微信公众平台开发模式 微信 公众平台 消息接口 开发模式 企业微信公众平台 微信墙 婚礼墙/晚会墙/会议墙/晒单墙/照片墙/历史墙 历史上的今天 作者:方倍工作室   原文: http://www.c ...

  7. php网站怎么对接微信群,PHP对接微信公众平台消息接口开发流程教程

    PHP(外文名:PHP: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使 ...

  8. php对接微信提醒,PHP对接微信公众平台消息接口开发流程教程

    PHP对接微信公众平台消息接口开发流程教程 发布于 2015-02-15 08:54:13 | 157 次阅读 | 评论: 1 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hyperte ...

  9. php微信公众号怎么开发_PHP对接微信公众平台消息接口开发流程详解及实例

    这篇文章主要介绍了PHP对接微信公众平台消息接口开发流程,如何使用PHP版接口操作公众平台消息,需要的朋友可以参考下 一.写好接口程序 在你的服务器上上传好一个接口程序文件内容如下: 代码如下:< ...

  10. 微信公众平台消息接口使用指南

    >>微信公众平台接口申请地址 最近微信开发这个东西炒的很猛,于是dApps考虑提供一些资源. 一 .微信公众平台消息接口简介 公众平台消息接口为开发者提供了一种新的消息处理方式. 二 . ...

最新文章

  1. cs通信查询mysql数据库_C#访问和操作MYSQL数据库
  2. 二十三、死锁的处理策略---避免死锁(银行家算法)
  3. Citrx XenDesktop 7 实施三 配置XenServer
  4. html制作花样链接卡页面_花样链接卡.html
  5. 学python最重要的是_基础、语法都不是最重要的,学Python最重要的是什么?编程思路!-站长资讯中心...
  6. Qt调用动态链接库ControlCAN.dll实例
  7. 手机技巧:手机用一段时间就发烫,如何解决?
  8. ElasticSearch优化系列三:索引过程
  9. 【Flink】Flink开发中遇到的问题及解法
  10. linux下安装cudnn
  11. 安卓rom制作教程_安卓手机TWRP_Recovery卡刷图文教程 适用于卡刷ROM,TWRP救砖
  12. 自定义Java规则 Sonar
  13. 大奖赛现场统分(哈工大Mooc)
  14. 更换持续集成工具,从 Travis 到 Github Actions
  15. UOJ #449.【集训队作业2018】喂鸽子 min-max容斥
  16. MySQL慢查询,一口从天而降的锅!
  17. 牛客网刷题——斩获offer
  18. Class的基本语法
  19. 【无标题】关于BC25连接电信物联网平台的问题(批量产品在广东连接不到物联网平台,在合肥测试是可以的)
  20. 北京信息科技大学计算机学院官网,北京信息科技大学教务处官网入口地址

热门文章

  1. 基于深度信念网络的事件识别
  2. [每日一氵] openCV drawMatches 函数中 flag 用法
  3. 详解String的intern方法
  4. 计算机税率函数,个税计算器2021 - 个人所得税计算器2021 - 个人所得税的Excel函数计算公式整理...
  5. 好用的邮箱客户端有哪些,办公用什么邮箱客户端呢?
  6. 企业邮箱哪个比较安全好用?外贸邮箱品牌哪个好用?
  7. 用python玩转数据前三节_2020中国大学慕课用Python玩转数据题目答案
  8. html怎么设置章节,奇数页眉设置成章节名 假设此处需要显示的是章对应内容
  9. 解决MAC系统Big Sur 11无法安装cad注册机无权限 奔溃 闪退问题 AutoCAD 2021 for Mac CAD2021 中文版安装注册激活教程
  10. 计算机任务管理器恢复默认,我的电脑中的任务管理器怎么打不开了,总是提示的“任务管理器已被系统管理员停用”,请问如何才能使任务管理器恢复正常。...