回调模式

在回调模式下,企业不仅可以主动调用企业号接口,还可以接收成员的消息或事件。接收的信息使用XML数据格式、UTF8编码,并以AES方式加密。

企业号的每个应用都有自己的回调模式开关。在管理端开启并设置好相关参数后,此应用的回调模式才生效。

针对加解密的处理,微信提供了各种语言的库,企业可以在附录中下载。

开启应用的回调模式

当你开启应用的回调模式时,企业号会要求你填写应用的URL、Token、EncodingAESKey三个参数。

URL是企业应用接收企业号推送请求的访问协议和地址,支持http或https协议。

Token可由企业任意填写,用于生成签名。

EncodingAESKey用于消息体的加密,是AES密钥的Base64编码。

验证URL、Token以及加密的详细处理请参考后续'接收消息时的加解密处理'的章节。

验证URL有效性

当你提交以上信息时,企业号将发送GET请求到填写的URL上,GET请求携带四个参数,企业在获取时需要做urldecode处理,否则会验证不成功。

参数

描述

是否必带

msg_signature

微信加密签名,msg_signature结合了企业填写的token、请求中的timestamp、nonce参数、加密的消息体

timestamp

时间戳

nonce

随机数

echostr

加密的随机字符串,以msg_encrypt格式提供。需要解密并返回echostr明文,解密后有random、msg_len、msg、$CorpID四个字段,其中msg即为echostr明文

首次校验时必带

企业通过参数msg_signature对请求进行校验,如果确认此次GET请求来自企业号,那么企业应该对echostr参数解密并原样返回echostr明文(不能加引号,不能带bom头,不能带换行符),则接入验证生效,回调模式才能开启。

后续回调企业时都会在请求URL中带上以上参数(echostr除外),校验方式与首次验证URL一致。

使用回调模式

企业号在回调企业URL时,会对消息体本身做AES加密,以XML格式POST到企业应用的URL上;企业在被动响应时,也需要对数据加密,以XML格式返回给微信。企业的回复支持文本、图片、语音、视频、图文等格式。

微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。如果在调试中,发现成员无法收到响应的消息,可以检查是否消息处理超时。

当接收成功后,http头部返回200表示接收ok,其他错误码一律当做失败并发起重试

关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime排重。

假如企业无法保证在五秒内处理并回复,可以直接回复空串,企业号不会对此作任何处理,并且不会发起重试。这种情况下,可以使用发消息接口进行异步回复。

请求说明:

回调数据格式:

1.msg_encrypt为经过加密的密文(消息明文格式参见 接收普通消息,事件明文格式参见 接收事件)

2.AgentID为接收的应用id,可在应用的设置页面获取

3.ToUserName为企业号的CorpID

企业需要对msg_signature进行校验,并解密msg_encrypt,得出msg的原文。

被动响应给微信的数据格式:

timestamp

1.msg_encrypt为经过加密的密文(消息明文格式参见 被动响应消息),算法参见附录

2.MsgSignature为签名,算法参见附录

3.TimeStamp为时间戳,Nonce为随机数,由企业自行生成

接收消息时的加解密处理

企业可以直接使用微信提供的库进行加解密的处理,目前提供的有c++/python/php/java/c#等语言版本。代码提供了解密、加密、验证URL三个接口,企业可根据自身需要下载 (参见附录的加解密库下载)。以下为库函数的使用说明(以c++为例),更详细的加解密方案请参考(附录)。

1、解密函数

int DecryptMsg(const string &sMsgSignature, const string &sTimeStamp, const string &sNonce, const string &sPostData, string &sMsg);

参数说明

参数

必须

说明

sMsgSignature

从回调URL中获取的msg_signature参数

sTimeStamp

从回调URL中获取的timestamp参数

sNonce

从回调URL中获取的nonce参数

sPostData

从回调URL中获取的整个post数据

sMsg

用于返回解密后的msg,以xml组织

返回说明

请参阅附录加解密部分。

2、加密函数

int EncryptMsg(const string &sReplyMsg, const string &sTimeStamp, const string &sNonce, string &sEncryptMsg);

参数说明

参数

必须

说明

sReplyMsg

返回的消息体原文

sTimeStamp

时间戳,调用方生成

sNonce

随机数,调用方生成

sEncryptMsg

用于返回的密文,以xml组织

返回说明

请参阅附录加解密部分。

3、验证URL函数

int VerifyURL(const string &sMsgSignature, const string &sTimeStamp, const string &sNonce, const string &sEchoStr, string &sReplyEchoStr);

参数说明

参数

必须

说明

sMsgSignature

从回调URL中获取的msg_signature参数

sTimeStamp

从回调URL中获取的timestamp参数

sNonce

从回调URL中获取的nonce参数

sEchoStr

从回调URL中获取的echostr参数。注意,此参数必须是urldecode后的值

sReplyEchoStr

解密后的echostr,用于回包。注意,必须原样返回,不要做加引号或其它处理

返回说明

请参阅附录加解密部分。

获取微信服务器的ip段

请求说明

Https请求方式: GET

参数说明

参数

必须

说明

access_token

调用接口凭证

返回结果

{

"ip_list": ["101.226.103.*", "101.226.62.*"]

}

python企业微信回调_回调模式相关推荐

  1. php 企业微信指令回调借款_企业微信外部联系人回调事件

    企业微信外部联系人回调事件 说明: 1) 下列"外部联系人" 和 "客户联系" 其实都是一个意思,都是指顾客,但是由于企业微信开发文档中叫"外部联系人 ...

  2. python 企业微信群机器人_企业微信群机器人应用:使用python从网站抓取行业资讯并定时推送...

    在企业经营过程中,及时了解行业相关信息(市场动态.竞品策略.行业数据等等)是非常必要的.通常情况下,商品部门.营销部门.市场部门可能都会安排专门的人员定期进行这些信息的搜集.整理,再进行内部的分享. ...

  3. python企业微信机器人发送文件

    python企业微信机器人发送文件 import requests#传入文件 def post_file(id_url,wx_url,file):data = {'file': open(file,' ...

  4. python企业微信回调_Python+Flask 微信企业号开发二之开启回调模式

    一.  概述 上文主要是关于微信主动发送消息给用户, 这篇文章主要是用来描述如何开启微信企业号的回调模式 二 . 操作 1. 登陆微信企业号应用中心--我的应用--模式选择--回调模式 2. 代码 # ...

  5. python企业微信群聊_企业微信、钉钉群消息python机器人自动推送

    钉钉具体的接口配置文档:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq 企业微信的接口配置文档,目前在应用内部添加机器人时能够查看,还没有提供 ...

  6. python企业微信群聊_给企业微信加个群机器人

    现在很多企业在使用企业微信或钉钉进行工作交流,我们可以在群里添加一个自定义群机器人,定时发送一些提醒或咨询信息,它可以作为一个小组手,也为工作增加一点乐趣. 群机器人 下面是企业微信和钉钉的群机器人文 ...

  7. python企业微信特定用户_python3调用企业微信api!开发一款属于自己的企业微信...

    python3调用企业微信api 最后更新时间:2020/5/11 前段时间,我将企业微信官方提供的python接口代码的部分功能修改成了python3的,并且自己也使用并测试过部分功能: 因为并没有 ...

  8. 用python刷微信阅读_使用python让微信读书自动翻页

    微信读书目前是朋友圈最流行的一款读书app,但是很遗憾微信读书没有自动翻页模式,不过这可难不倒程序员,写个程序让它自动翻页不久好了. 而且微信读书有这样一个激励政策:"每阅读30分钟可兑1赠 ...

  9. python+企业微信机器人把数据库数据发送到群的方法我悟了

    经常有很多的自动化任务,还有用户反馈什么的如果数据入库,想要查看一天的新增数量自动发送到群里,可以用python写一点代码让企业微信机器人从数据库拿到数据后拼接成通知格式发送到群.以下是小菜鸟的简单方 ...

  10. 企业微信接口开启收费模式,意在第三方生态健康发展

    企业微信官方在5月9日一篇"面向服务商进行收费模式调整的说明",在服务商中一石激起千层浪,引发不少的讨论,此次企业微信官方意在何处,对于服务商与企业用户又会出现什么影响. 首先我们 ...

最新文章

  1. 顺序表-顺序表表示集合-差集(for + while ,不断遍历)
  2. http://q.cnblogs.com/q/54251/
  3. boost::fusion::traits::deduce_sequence用法的测试程序
  4. [SQL基础教程]1-4 SQL 表的创建
  5. 计算机网络之数据链路层:5、停止等待协议
  6. 【BZOJ4205】卡牌配对 最大流
  7. 汽车车牌JS正则表达式验证(含新能源车牌)
  8. html颜色代码生成器,在线取色配色工具,CSS3渐变色代码生成器-易玩稀有
  9. 2017 Google IO 开发者大会直播入口
  10. Elasticsearch Nested 选型,先看这一篇!
  11. 经验分享|裸金属服务器部署
  12. iphone7plus启动时icon被拉伸放大的原因
  13. 机器学习算法 09-02 TensorFlow核心概念 TensorFlow基础代码、TensorFlow线性回归解析解和BGD求法
  14. 两个和尚的故事【摘】
  15. Unity实现按Esc键控制面板出现消失,同时游戏暂停
  16. [imx8mpevk] pcie endpoint test
  17. CodeForces - 89A - Robbery
  18. OpenMV扫码识别
  19. 综述 | 最新双曲深度神经网络综述论文
  20. 2021-4-8学习笔记

热门文章

  1. Android 取消返回键返回事件,返回桌面,再按一次退出程序,双击事件
  2. android 获取url中的参数,验证邮箱格式,截取字符串中键值对的值,String的字节长度,去空格,替换字符
  3. oracle数据泵导入分区表,数据泵导入分区表统计信息报错(七)
  4. android正则判断两个符号之间,Android字母、数字、字符任意两种组合正则验证
  5. vue-router 路由跳转
  6. 花旗linux 内核 如何调试,揭秘首个运行在Linux平台的核心银行系统
  7. 【Makefile由浅入深完全学习记录5】预定义变量的使用
  8. VS2010主题设置及插件推荐
  9. 深入浅出etcd系列 – 心跳和选举
  10. 数学:乘法逆元-拓展GCD