【企微开发最佳实践】企业微信应用回调Get验证及Post处理问题汇总!
最近关注到 企微开发者社区和 ToB Dev 公众号下的 企微开发同行群 里经常有同行问 回调Get验证及Post处理的问题。企微的回调填写回调url保存时会发送Get回调验证(大多新手这会出问题),还有企业微信在事件发生时推送的正常Post回调。
一,常见问题
1,基础应用(通讯录同步,审批等)及自建应用回调
2,自建代开发模板回调及应用回调
3,第三方应用的指令回调数据回调等
二,原因及解决
企业微信不管是什么应用,回调的Url的回调get验证及post处理文档在都在其对应的开发指南回调配置下,不管是企业内部还是第三方应用其回调文档大致都是一样的(根据应用类别看对应类别下文档即可)。
1,回调Get验证
回调url的Get请求验证其实是企业微信验证你的url是否正常可用,上面的问题其实都是保存回调调产生的回调Get验证没正常响应导致,文档要求需要解密企业微信发送到Url的Get请求的加密信息将其解密返回明文信息即可(返回的明文信息是有要求)根据我们ToB Dev二年多十几个群的汇总九成九的是没正解解密返回明文。
回调的回调信息产生要正常解密,官方提供了不同语言的解密工具类,不同应用的回调Get验证使用官方解密类初始化解密类时的recieveid不一样。很多同行解密会在此解密失败,ToB Dev将其整理如下。
解密后将明文返回但需要满足条件,文档上有写,同时需要注意下请求返回状态码最好是200。
- 在1秒内响应GET请求,响应内容为上一步得到的明文消息内容(不能加引号,不能带bom头,不能带换行符)
2,Post回调内容
企业微信人去在某些事件发送时向回调url通过Post请求推送对应事件(post体内xml内容),我们需要解密推送过来的内容进行处理。
与回调的Get验证一样,Post不同应用类别的回调处理解密类时的recieveid不一样,ToB Dev整理如下。
其实部分解密的id对应的可以直接从post过来的xml中的ToUserName取如代开发的应用回调,第三方的数据回调等(具体根据文档)。解密后Post大多是要求返回success字符串,部份应用场景可能是返回自己组装的加密信息(按文档要求走)。
请问 企业内部应用 配置回调地址时 corpId使用企业ID 一直报错 -40005
是什么原因呢,需要用哪个ID
大家可以试下加一句
produces = MediaType.TEXT_PLAIN_VALUE
一般框架默认application/json,所以返回给企微的会拼接双引号,比如“253544665744364”。
补充上面这一句,指定类型,返回就去掉双引号了。
通过打印回调时候的入参,然后用postman调自己测试,可以看出区别
代开发和三方的客户ID新的都是加密的,使用获取永久授权码获取的客户id进行解密
在配置回调地址时,我的返回数据格式时这个,是不是不对
为什么接口验证通过,企业微信添加了好友没有触发回调请求呢,是不是哪里配置没配正确?
会话存档的指令回调也是这样吗,有提供token
虽然我已经调试成功了,但还是想反馈一下。最开始回调验证的时候,我在接口调试工具测试,显示成功,但是在正式配置的时候显示不通过。测了一会儿发现是要返回整数,教程里面只是说不能加引号,还是有点容易误会。
我是用的是代开发模版
但是 我还没有模版suiteid 只能传 企业corpid
不知道哪里还有问题
我的报错是:aes解密失败,Illegal key size
请问怎么解决呀?求求了~~~
为啥就不能出个简单的教程呢,要封掉了
推送suite_ticket或者刷新suite_ticket InputStream inputStream = request.getInputStream(); String sPostData = IOUtils.toString(inputStream, "UTF-8"); log.info("trialCatCallBack.sPostData.out:{}", sPostData); post请求里始终没有ticket
解密后Post大多是要求返回success字符串,部份应用场景可能是返回自己组装的加密信息(按文档要求走)。这个文档在哪里找?没找到
为什么我一直解密为空
你好,代开发过程中我也遇到了这个问题。并且corpid和suiteid都已经试过了,还是提示验证callbackurl失败,能否帮忙看下是什么原因?
。。。。解决了,写文档的真该死啊!!!除了corpid之外还有个open_corpid,这里应该用
https://qyapi.weixin.qq.com/cgi-bin/service/corpid_to_opencorpid?provider_access_token=token
这个接口,换取open_corpid这个值做解密,企业微信的开发和产品应该被裁,祸害!!
你好,我想问一下第三方应用开发中,我数据回调中加了对应的参数以便后台区分使用suiteId和corpid,但是企业微信给的回调为什么没有携带这些参数呢?