【企微开发最佳实践】企业微信应用回调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. 1秒内响应GET请求,响应内容为上一步得到的明文消息内容(不能加引号,不能带bom头,不能带换行符

2,Post回调内容

企业微信人去在某些事件发送时向回调url通过Post请求推送对应事件(post体内xml内容),我们需要解密推送过来的内容进行处理。


图片



图片


图片


与回调的Get验证一样,Post不同应用类别的回调处理解密类时的recieveid不一样,ToB Dev整理如下。

其实部分解密的id对应的可以直接从post过来的xml中的ToUserName取如代开发的应用回调,第三方的数据回调等(具体根据文档)。解密后Post大多是要求返回success字符串,部份应用场景可能是返回自己组装的加密信息(按文档要求走)。



评论·16
2024/11/16

请问 企业内部应用 配置回调地址时 corpId使用企业ID 一直报错 -40005

是什么原因呢,需要用哪个ID

赞同
评论 1
2024/11/16
太坑了,配置可信域名的时候提示 域名主体为服务商  所以导致只能创建服务商的应用,我创建的企业内部应用使用此域名就报错-40005
赞同
回复
你还未登录,请先登录
2024/10/09

大家可以试下加一句

produces = MediaType.TEXT_PLAIN_VALUE


一般框架默认application/json,所以返回给企微的会拼接双引号,比如“253544665744364”。

补充上面这一句,指定类型,返回就去掉双引号了。


通过打印回调时候的入参,然后用postman调自己测试,可以看出区别

赞同
评论
2024/09/05
会话存储此处需要用户先用rsa私钥解密encrypt_random_key后,作为encrypt_key参数传入sdk来解密encrypt_chat_msg获取会话存档明文。这一步你们成功了吗?
赞同
评论
2024/08/16

代开发和三方的客户ID新的都是加密的,使用获取永久授权码获取的客户id进行解密

赞同 1
评论
2024/06/27

在配置回调地址时,我的返回数据格式时这个,是不是不对

赞同 1
评论
2024/06/20

为什么接口验证通过,企业微信添加了好友没有触发回调请求呢,是不是哪里配置没配正确?

赞同
评论
2024/05/30

会话存档的指令回调也是这样吗,有提供token

赞同
评论
2024/05/13

虽然我已经调试成功了,但还是想反馈一下。最开始回调验证的时候,我在接口调试工具测试,显示成功,但是在正式配置的时候显示不通过。测了一会儿发现是要返回整数,教程里面只是说不能加引号,还是有点容易误会。

赞同 3
评论 10
2024/05/24
我也是这个问题,已经解决了,真的太坑了。。。。
赞同
回复
回复 2024/05/29
怎么解决的?
赞同
回复
回复 2024/05/30
我的情况是直接把解密的字符串返回了。 转成数字类型返回就没有引号就没问题了
赞同
回复
2024/07/25
调试成功之后,是把请求地址完成的copy到API接收消息的URL上吗
赞同
回复
回复 2024/08/13
我的解密后是5064312506252222181,超出数字类型的最大范围了呀,根本没办法转为int类型或者Integer类型
赞同
回复
回复 2024/08/29
string
赞同
回复
回复 2024/10/09
我也是,大佬解决了吗
赞同
回复
回复 2024/10/09
不用转,getMapping后面跟个类型,text/plain就好了
赞同 1
回复
回复 2024/10/09
谢谢大佬,已解决
赞同
回复
回复 2024/11/05
感谢大佬
赞同
回复
你还未登录,请先登录
2024/03/12

我是用的是代开发模版

但是 我还没有模版suiteid 只能传 企业corpid

不知道哪里还有问题

赞同 1
评论
2024/03/01

我的报错是:aes解密失败,Illegal key size

请问怎么解决呀?求求了~~~

赞同
评论 3
2024/07/03
如果是jdk8_161以下的版本,升级jdk到1.8_161及以上
赞同
回复
回复 2024/10/09
请问解决了么,我的版本是jdk1.8.0_25,未解决这个问题
赞同 1
回复
回复 2024/12/10
请问解决了么,我的版本是jdk1.8.0_351。
赞同
回复
你还未登录,请先登录
2024/01/26

为啥就不能出个简单的教程呢,要封掉了

赞同
评论
2024/01/06
推送suite_ticket或者刷新suite_ticket

InputStream inputStream = request.getInputStream();
String sPostData = IOUtils.toString(inputStream, "UTF-8");
log.info("trialCatCallBack.sPostData.out:{}", sPostData);

post请求里始终没有ticket
赞同
评论
2023/12/08

解密后Post大多是要求返回success字符串,部份应用场景可能是返回自己组装的加密信息(按文档要求走)。这个文档在哪里找?没找到

赞同
评论 2
2023/12/19
你解决了吗?
赞同
回复
2024/11/29
我返回了success字符串,校验还是没通过,绝了
赞同 1
回复
你还未登录,请先登录
2023/10/24

为什么我一直解密为空



赞同
评论 2
2023/12/19
你解决了吗?
赞同 1
回复
2025/03/26
解决了吗,我也是空的
赞同
回复
你还未登录,请先登录
2023/06/06

你好,代开发过程中我也遇到了这个问题。并且corpid和suiteid都已经试过了,还是提示验证callbackurl失败,能否帮忙看下是什么原因?

。。。。解决了,写文档的真该死啊!!!除了corpid之外还有个open_corpid,这里应该用



https://qyapi.weixin.qq.com/cgi-bin/service/corpid_to_opencorpid?provider_access_token=token

这个接口,换取open_corpid这个值做解密,企业微信的开发和产品应该被裁,祸害!!

赞同 5
评论 3
2023/06/09
这个token值传啥?
赞同
回复
2024/07/15
见过最烂的文档
赞同
回复
2024/08/20
哥,文档在哪里啊
赞同
回复
你还未登录,请先登录
2023/03/24

你好,我想问一下第三方应用开发中,我数据回调中加了对应的参数以便后台区分使用suiteId和corpid,但是企业微信给的回调为什么没有携带这些参数呢?


赞同 1
评论 2
2023/06/06
我解决了,看我回复
赞同 1
回复
回复 2024/04/08
怎么解决的,麻烦分享一下
赞同
回复
你还未登录,请先登录