微信公众平台
基础信息:
- 说明:用于微信公众平台服务端api的调用包括:小程序、小游戏、公众号、服务号。 同时支持对公众平台的消息监听。
- 实现类:
org.apiFlow.weixin.WechatGzhApp - 官方文档地址:https://developers.weixin.qq.com/doc/subscription/guide/
- 是否支持触发器:是
注意事项:
- 本应用不包括微信开放平台以及企业微信的API调用。
- 不能做为第三方平台代商家调用
基本配置
appId: 微信应用idappSecret:微信应用密钥token:配置消息推送中指定的Token码。
以上配置信息都需要在微信开发者平台指定应用基础信息栏中获取
应用配置示例
在config.groovy中配置
app.myWeixin.type="org.apiFlow.weixin.WechatGzhApp"
app.myWeixin.appId="wx38471a17c9" // 微信应用id
app.myWeixin.appSecret="4e0f7eee065be664385b2c0044a2" // 应用密钥
app.myWeixin.token="49_VbRX"// 消息推送token- 上例配置了一个
myWeixin微信公众平台实例id
微信端配置示例
若要接收微信事件 需要在微信开发者平台配置消息推送,配置如下:
- URL:
{webhookRoot}/gzh/{appId}webhookRoot指所有webhook触发器访问根路径、appId与配置应用时的appId对应 - Token: 与配置应用时的token对应
- 消息加密:暂时只支持明文模式
- 数据格式:XML
注意:
如果你在本地调式微信消息推送,需要确保微服务器能访问你本地服务 ,可通过搭建内网穿透隧道或是把ApiFlow服务部署到可公开访问的服务器上。
声明任务
defaultTask 声明默认HTTP任务
WechatGzhApp是一个标准http应用支持默认http任务声明defaultTask ,声明后的HTTP任务增加以下特性:
- 设置http请求方法为
POST - 添加基础授权处理,用户无需在配置
access_token查询参数 - 对返回结果的异常处理,当返回
errcode不为0时即认为调用失败。
示例:
假设已配置微信应用实例myWeixin
//1.创建自定义菜单
task1= myWeixin {
url="https://api.weixin.qq.com/cgi-bin/menu/create"
json """"
{
"button":[
{
"type":"click",
"name":"今日歌曲",
"key":"V1001_TODAY_MUSIC"
}]
}
"""
}
//2.查询自定义菜单
task2= myWeixin "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info"task1任务基于默认方法声明,设置url属性同时通过json方法指定了请求体。task2任务基于默认方法的快捷方式声明,指定了url,另外所有快捷声明的HTTP任务都以GET方法来请求。- 两个任务都无需处理
access_token,因为应用内部已处理。 - 两个任务都是通过
defaultTask默认方法声明,所以都省略了方法名
注意:指定请求体时 json与字符串中间是空格不是=等号。
触发器配置
当前应用支持对微信公众平台的消息进行监听并触发流程,支持一下两种监听:
- 监听消息:监听微信用户向公众平台发送的消息包括文本、图片、语音、视频等消息,具体参考官方文档
- 监听事件:监听微信用户和公众平台产生的交互事件包括:关注/取消关注事件、扫描带参数二维码事件等。
监听消息
语法:
listen 应用名 on '消息类型'- 消息类型包括:文本(text)、图片(image)、语音(voice)、视频(video) 更多请参考官方文档
配置示例:
假设已配置微信应用实例myWeixin
init {
listen myWeixin on 'text' // 监听用户的文本消息
listen myWeixin on 'video'// 监听用户的语音消息
listen myWeixin on '*' // 监听用户的所有消息
}- 监听触发器只能配置在
init{ }模块中 - 消息类型只能配置官方支持的类型
*表示监听所有消息类型- 一个流程中可以配置多个监听触发器
监听事件
语法:
listen 应用名 onEvent '事件类型'- 事件类型包括:关注(subscribe)、取消关注(unsubscribe)、扫描带参二维码(SCAN)更多请参考官方文档
配置示例:
假设已配置微信应用实例myWeixin
init {
listen myWeixin onEvent 'subscribe' // 监听用户关注事件
listen myWeixin onEvent 'unsubscribe'// 监听用户取消关注事件
listen myWeixin onEvent '*' // 监听用户的所有事件
}- 监听触发器只能配置在
init{ }模块中 - 事件类型只能配置官方支持的类型
*表示监听所有事件类型- 一个流程中可以配置多个监听触发器
监听器返回结果
监听消息与事件本质都是webhook监听 ,其接收微信服务器的http请求内容包含url参数与请求体:
URL参数
- signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
- timestamp 时间戳
- nonce 随机数
- echostr 随机字符串
请求体
不同消息与事件请求体字段不一样,需阅读官方文档了解 ,下表为文本消息请求体,
| 参数 | 描述 |
|---|---|
| ToUserName | 开发者微信号 |
| FromUserName | 发送方账号(一个OpenID) |
| CreateTime | 消息创建时间 (整型) |
| MsgType | 消息类型,文本为text |
| Content | 文本消息内容 |
| MsgId | 消息id,64位整型 |
| MsgDataId | 消息的数据ID(消息如果来自文章时才有) |
| Idx | 多图文时第几篇文章,从1开始(消息如果来自文章时才有) |
注意:微信请求体为xml格式,所以在转换时将不区分类型,上例中所有字段都为字符串类型。
获取方式:
触发流程时带入的参数将会封装到input对象中,获取方式如下:
- url参数获取:
input.参数名如:input.timestamp - 请求体参数获取:
input.body.参数名如:input.body.ToUserName