服务端命令插件-返回任意数据命令 (解决微信、钉钉回调数据解析问题)
本帖最后由 phoben 于 2022-6-15 23:04 编辑众所周知,活字格自带的"返回命令"插件,只能返回下面这种固定形式的JSON数据:{
"ErrCode":0,
"ErrMessage":"Success"
}
使用场景一:
但有些场景我们需要自定义返回这个数据包,比如微信、钉钉等其他第三方平台的回调、对接等场景,需要我们返回一个符合对方要求的数据。
这时候如果用活字格自带的返回命令,对方是识别不了的。
使用场景二:
在用钉钉、企业微信、公众号等进行回调对接的时候,我们会需要提前将数据返回,再执行我们的业务逻辑。
比如上述平台在添加联系人、点击菜单等事件发生的时候,官方会给我们回调API地址发送一个数据。
我们通过解读这个数据来获取用户的互动信息,从而进行业务逻辑判断和操作。
但是往往官方的回调API都有时间限制,例如钉钉就是要求在1.5秒之内,回复"success",它就知道我们收到了,否则会认为我们接受失败,重新发起一次数据请求。
如果这时候我们的业务逻辑比较复杂,在1.5秒之内不能保证完成,那么我们就需要在恰当的时机,先返回数据,再执行逻辑;
但是活字格自带的“返回命令”只要一执行,就会终止进程,也就是后面的命令不再执行。
对于这个需求,本插件也考虑到了,一起封装起来,大家可以在插件内选择“返回数据后动作”
动作包括:退出循环、继续执行、结束命令,效果就如字面意思,当插件返回数据给调用方以后,会根据你的选择来决定是否继续执行
如果当前是在一个循环命令里面,还可以选择跳出循环后继续执行。
基于上面这两个需求,就开发了一个“返回任意数据”的命令插件,这里感谢“阿享”提供的帮助!
参数说明:
返回数据:可选择要返回的数据,可以为任意格式、公式、变量;
数据类型:这里可以指定一个数据类型,比如返回的是JSON,就应该选择"application/json"这一项;
返回数据后动作:可指定此命令执行完以后,整个服务端命令是否结束;
不返回数据:勾选后,不会返回任何数据,只执行“返回数据后的动作”;
场景模拟:
下面结合起来该怎么使用插件,用图片说明:
(图中部分插件暂未公开发布)
上面我们可以看到这个服务端命令完全实现了一个微信回调的处理方式,再也不用WebApi了。
上面的命令,按照顺序,实现了这么一个处理逻辑,这是之前做不到的:
[*]获取这次请求过来的数据
[*]将请求数据转为JSON
[*]返回数据(不结束命令)
[*]写表等业务逻辑
[*]结束命令(不返回数据)
本机测试:
我们模拟微信,想这个服务端命令接口POST一个数据,数据就是模拟真实的微信用户互动消息事件(正式环境下,此数据由微信官方向我们发送)
通过这个测试,就会发现命令是奏效的,返回的数据正式我们前面命令中处理好的数据,因为业务逻辑简单,只用了37ms。
再看一下数据库,也成功记录了这次的数据,因为数据库写入命令是在返回数据之后,所以也证明,返回数据但不结束命令也是OK的。
可能有初学的朋友会问,这玩意儿究竟有什么用?这里我提前回答一下!
1、完全脱离WEBAPI代码,在服务端实现各个平台的回调对接处理;
2、结合我正在开发的几个插件(XML转JSON、获取数据流)可直接在活字格的服务端命令中,对微信、钉钉等平台的回调事件进行验证、接受、处理、回复
也就是说,可以完全在服务端命令中实现钉钉、微信、企业微信等平台的:添加好友事件处理、点击菜单事件、用户消息、群事件、扫码事件、关注事件、支付事件等等。。
欢迎大家在下面讨论提建议!
https://gcdn.grapecity.com.cn/data/attachment/forum/202111/27/091821ek9zmngwqd7rwwi7.gif
2021-08-26
首次发布 7.0.0.0
厉害,对接钉钉的时候暂时还未用到,以后肯定能用到,先收藏 这个太棒了 大佬真厉害!一直在想怎么跟钉钉对接,你这就做出来了!:hjyzw: 先来点个赞:hjyzw: 这个太棒了 :hjyzw:论坛因超哥、阿享、谢总、李总、海贼头大佬、功夫熊猫大佬等一众默默奉献大佬而精彩。特别是超哥,帖子和插件受益良多,多谢了{:3_46:} alexyui 发表于 2021-8-27 10:30
论坛因超哥、阿享、谢总、李总、海贼头大佬、功夫熊猫大佬等一众默默奉献大佬而精彩。特别是超哥, ...
一起加油 这个太棒了 大佬,搞个视频分享一下