[TOC]

关于接收消息

为了能够让自建应用和企业微信进行双向通信,企业可以在应用的管理后台开启接收消息模式。

开启接收消息模式的企业,需要提供可用的接收消息服务器URL。

开启接收消息模式后,用户在应用里发送的消息会推送给企业后台。此外,还可配置地理位置上报等事件消息,当事件触发时企业微信会把相应的数据推送到企业的后台。

企业后台接收到消息后,可在回复该消息请求的响应包里带上新消息,企业微信会将该被动回复消息推送给用户。

开启接收消息

设置接收消息的参数

在企业的管理端后台,进入需要设置接收消息的目标应用,点击“接收消息”的“设置API接收”按钮,进入配置页面。

要求填写应用的URL、Token、EncodingAESKey三个参数

URL是企业后台接收企业微信推送请求的访问协议和地址,支持http或https协议。

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

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

这三个参数的用处在加解密方案说明章节会介绍,此处不用细究。

验证URL有效性

当点击“保存”提交以上信息时,企业微信会发送一条验证消息到填写的URL,发送方法为GET。

企业的接收消息服务器接收到验证请求后,需要作出正确的响应才能通过URL验证。

企业在获取请求时需要做Urldecode处理,否则会验证不成功

你可以访问接口调试工具进行调试,依次选择 建立连接 > 测试回调模式。

假设接收消息地址设置为:http://api.3dept.com/,企业微信将向该地址发送如下验证请求:

请求方式:GET

请求地址:http://api.3dept.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS&timestamp=13500001234&nonce=123412323&echostr=ENCRYPT_STR

参数说明

参数

必须

说明

msg_signature

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

timestamp

时间戳

nonce

随机数

echostr

加密的字符串。需要解密得到消息内容明文,解密后有random、msg_len、msg、CorpID四个字段,其中msg即为消息内容明文

企业后台收到请求后,需要做如下操作:

对收到的请求做Urldecode处理

通过参数msg_signature对请求进行校验,确认调用者的合法性。

解密echostr参数得到消息内容(即msg字段)

在1秒内原样返回明文消息内容(不能加引号,不能带bom头,不能带换行符)

以上2~3步骤可以直接使用验证URL函数一步到位。

之后接入验证生效,接收消息开启成功。

使用接收消息

开启接收消息模式后,企业微信会将消息发送给企业填写的URL,企业后台需要做正确的响应。

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

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

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

假如企业无法保证在五秒内处理并回复,或者不想回复任何内容,可以直接返回200(即以空串为返回包)。企业后续可以使用主动发消息接口进行异步回复。

接收消息请求的说明

假设企业的接收消息的URL设置为http://api.3dept.com。

请求方式:POST

请求地址 :http://api.3dept.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS&timestamp=13500001234&nonce=123412323

接收数据格式 :

参数说明

参数

说明

ToUserName

企业微信的CorpID,当为第三方套件回调事件时,CorpID的内容为suiteid

AgentID

接收的应用id,可在应用的设置页面获取

Encrypt

消息结构体加密后的字符串

企业收到消息后,需要作如下处理:

对msg_signature进行校验

解密Encrypt,得到明文的消息结构体(消息结构体后面章节会详说)

如果需要被动回复消息,构造被动响应包

正确响应本次请求

以上1~2步骤可以直接使用解密函数一步到位。

3步骤其实包含加密被动回复消息、生成新签名、构造被动响应包三个步骤,可以直接使用加密函数一步到位。

被动响应包的数据格式:

timestamp

参数说明

参数

是否必须

说明

Encrypt

经过加密的消息结构体

MsgSignature

消息签名

TimeStamp

时间戳

Nonce

随机数,由企业自行生成

获取企业微信服务器的ip段

企业微信在回调企业指定的URL时,是通过特定的IP发送出去的。如果企业需要做防火墙配置,那么可以通过这个接口获取到所有相关的IP段。

请求方式:GET(HTTPS)

请求地址: https://qyapi.weixin.qq.com/cgi-bin/getcallbackip?access_token=ACCESS_TOKEN

参数说明:

参数

必须

说明

access_token

调用接口凭证

权限说明:

无限定。

返回结果:

{

"errcode": 0,

"errmsg": "ok",

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

}

参数说明:

参数

说明

ip_list

企业微信回调的IP段

企业微信 接收消息服务器,接收消息与事件相关推荐

  1. delphi 企业微信消息机器人_nodeJS实现企业微信机器人每天定时发消息实例 定时任务...

    nodeJS实现企业微信机器人每天定时发消息实例 背景 由于企业微信办公需要,"每天定时推送某消息用来提醒群里面所有人或者部分人",于是决定用企业微信自带的机器人来实现此功能,来代 ...

  2. vuewebsocket做消息提醒_企业微信群怎么定时群发消息?如何突破群发次数限制?...

    文丨语鹦企服私域管家原创,未经授权不得转载 我们在使用企业微信做营销时,经常需要给客户群发通知或活动福利.企业微信提供多客户群群发工具,只需一键群发,即可通知到所有群.但遇上节假日或者忙碌的时候,定时 ...

  3. 企业微信消息多久可以撤回?企业微信怎么查看撤回的消息?

    大家都知道,个人微信是可以撤回两分钟以内的消息,超过两分钟就无法撤回了.那企业微信可以撤回发送了多久的消息呢?撤回的消息还能够查看吗?跟着企业微信服务商艾客scrm小编,一起来看看吧. 其实,我们使用 ...

  4. 微信的url服务器接收微信信息的配置

    微信的url服务器接收微信信息的配置: http://hlg.ngrok.xiaomiqiu.cn/wgo-api-gateway/handle 其中 hlg.ngrok.xiaomiqiu.cn 为 ...

  5. python 微信发送图片_使用python向企业微信发送文字和图片消息

    使用python向企业微信发送文字和图片消息 吐槽一下企业微信的api文档真的不好读······ 企业微信本来是有功能,可以直接把图片显示到正文的,但是那个api我调用一直出错,各种折腾也没解决.后来 ...

  6. python实现微信自动发信息_Python实现企业微信机器人每天定时发消息实例

    1.背景 由于办公需要"每天定时推送某消息用来提醒群里面所有人",于是决定用企业微信自带的机器人来实现此功能.具体方法我来一一讲述. 2.企业微信API 3.想法 想到几种方式: ...

  7. php企业微信通讯录同步设置接收事件服务器

    第一步登陆企业微信pc端管理后台设置好信息,先不要点击保存,会提示失败 随后根据填写的URL编写接口,接口代码如下: //就是第一步图中的token$token = 'xxx';//就是第一步图中的E ...

  8. 企业微信加密消息体_企业微信机器人怎么发消息?企业微信机器人可以定时发消息吗?...

    企业微信外部群自带群机器人功能,可以协助员工高效管理社群,帮助我们运营客户,那么企业微信机器人怎么用呢? 使用企业微信机器人,需要管理员先进入企业微信管理后台,在[客户联系]-[效率工具]-[自动回复 ...

  9. node.js + 企业微信实现定时推送消息

    一 . 注册企业微信及配置 进入官网 https://work.weixin.qq.com/ 按要求填写资料开通企业微信. 1. 查看企业 ID 2. 创建应用 3. 查看应用 AgentId , S ...

最新文章

  1. 第6章 RTX 操作系统源码方式移植
  2. BCB中的RTTI机制
  3. 火狐配置java_java selenium+firefox环境搭建
  4. java socket5源码_Java利用TCP协议实现客户端与服务器通信【附通信源码】
  5. 相机姿态估计(五)--DLS
  6. 【HighCharts系列教程】一、认识Highcharts
  7. 几种开源许可协议(转载)
  8. 安卓接入高德地图3dmap黑屏问题解决
  9. 【知识图谱系列】知识图谱多跳推理之强化学习
  10. netlogo笔记(4):森林火灾模拟与模型改进
  11. 考CFA证书只通过一级有用吗?
  12. 小武实习的debug日记2
  13. 计算机原理学习(2)-- 存储器和I/O设备和总线
  14. java计算机毕业设计Internet快递柜管理系统源码+mysql数据库+系统+lw文档+部署
  15. anaconda python降级有影响吗_anaconda更新所有降级包
  16. docker network create: conflicts with network
  17. Kotlin学习笔记-3 --- 类与对象
  18. 东师理想云平台异步任务处理系统V2.0重构思路
  19. oracle12c命令行安装grid,oracle12c-RAC安装部署之GRID安装-grid设置
  20. 刘汝佳 语言篇(一)

热门文章

  1. egg(113)--egg之登录成功跳转到登录之前的页面
  2. 【iOS】控件截图、MP4格式视频流和m3u8格式视频流截取某一帧功能的实现
  3. 从Java到Spring为何独得青睐Spring Summit 2017不可不知的那些事儿
  4. 物联网电子标签助力无人便利店
  5. 64位ubuntu安装WPS
  6. jQuery Template的用法
  7. Java获取系统日期时间
  8. 摩根上调 思科股票评级至增持
  9. Windows Phone 开发工具包7.1公测版新特性
  10. oracle从备份提取归档,Oracle归档模式有备份,丢失数据文件的恢复