Skip to content

微信公众平台

基础信息:

  • 说明:用于微信公众平台服务端api的调用包括:小程序、小游戏、公众号、服务号。 同时支持对公众平台的消息监听。
  • 实现类:org.apiFlow.weixin.WechatGzhApp
  • 官方文档地址:https://developers.weixin.qq.com/doc/subscription/guide/
  • 是否支持触发器:是

注意事项:

  • 本应用不包括微信开放平台以及企业微信的API调用。
  • 不能做为第三方平台代商家调用

基本配置

  • appId : 微信应用id

  • appSecret:微信应用密钥

  • 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