python企业微信回调_回调模式

回调模式

在回调模式下,企业不仅可以主动调用企业号接口,还可以接收成员的消息或事件。接收的信息使用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.*"]

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos7 Apache 2.4.18编译安装

安装环境:CentOS Linux release 7.0.1406 (Core) 0x01 到官网http://httpd.apache.org/download.cgi#apache24下载apache http最新版 tar zxf httpd-2.4.18.tar.gz [rootlocalhost httpd-2.4.18]# rpm -qa | grep apr 查看当前主机上是否安装apr/apr-util,…

css划上去变长,Css3如何实现鼠标移上变长特效?(图文+视频)

本篇文章主要给大家介绍用css3实现鼠标移入变长效果的方法。在前端页面设计中,css的功能是异常强大的,只要运用好它,你能实现很多网站各种精彩的动态效果。那么在之前的文章中也给大家分享介绍了一些用css实现动画效果的方法,比如…

python两个同切圆_求两个圆的交点

我试图在Python中找到两个圆之间的交集(使用Matplotlib),但是找不到任何值。在为此,我为每个单独的圆创建X和Y的列表(Matplotlib在绘制圆时将第一个参数作为X值,第二个参数作为Y值),然后相应地使列表相交(例如,circle1…

oracle性能优化之awr分析

oracle性能优化之awr分析 作者:bingjava 最近某证券公司系统在业务期间系统运行缓慢,初步排查怀疑是数据库存在性能问题,因此导出了oracle的awr报告进行分析,在此进行记录。 导致系统的性能问题有很多,比如内存、cpu占…

小米路由器怎么连接无盘服务器,播放器+服务器的方法瞬间玩转小米路由方法图文介绍...

“厨具”:小米路由及其外接硬盘、安卓手机、威动播放器(VidOn Player)、威动服务器(VidOn Server)“食材”:冰雪奇缘、生活大爆炸用两种方法将其“熬制”,时间短、内容丰富,“营养价值”相当的高。一、将小米路由作为NAS&#xff…

python json.loads namespace_python json.loads兼容单引号数据的方法

Python的json模块解析单引号数据会报错,示例如下>>> import json>>> data "{field1: 0, field2: hehehehe, field3: hahaha}">>> json.loads(data)Traceback (most recent call last):File “”, line 1, inFile “/usr/lib/…

@class #import辨析 #include

解析: 很多刚开始学习iOS开发的同学可能在看别人的代码的时候会发现有部分#import操作写在 .m 文件中,而 .h 文件仅仅使用class进行声明,不禁纳闷起来,为什么不直接把#import放到h文件中呢? 这是因为 .h 文件在修改后&…

修改数据包欺骗服务器,Fiddler协议捕获编辑工具与Session欺骗原理详解

今天Kitty主要与大家分享Fiddler抓包工具与协议捕获编辑工具来与大家讲解Session欺骗原理过程,咱们主要通过Fiddller协议捕获工具来对比HTTPWatch两款工具之间的差别,最主要的是我们可以通过捕获到的请求进行二次编辑重新发送给服务器,这中间…

统计源期刊目录_统计源期刊是什么意思

统计源期刊是什么意思?统计源期刊全称中国科技论文统计源期刊,也就是我们常说的科技核心期刊,科技核心期刊是我国核心期刊体系中的一类,在国内个人评职晋升、学术评估中占据着重要地位,统计源期刊也是根据期刊多方面指…

ajax 请求post和get,ajax请求get和post

ajax请求get和post 内容精选换一换正常返回值类型说明200OKGET、PUT、POST操作正常返回204No ContentDELETE操作正常返回异常返回值说明400 Bad Request服务器未能处理请求。401 Unauthorized被请求的页面需要用户名和密码。403 Forbidden对被请求页面的访问被禁止。404 Not Fo…

python requests 重试_我可以为requests.request设置最大重试次数吗?

这不仅会改变最大重试次数,而且还会启用回退策略,使所有http://地址在重试前睡眠一段时间(总共5次):import requestsfrom urllib3.util.retry import Retryfrom requests.adapters import HTTPAdapters requests.Session()retries Retry(to…

产品专家Marty Cagan:不做仅仅会编码的人

Marty Cagan是享有世界声誉的产品管理专家,曾担任Netscape副总裁、eBay产品管理及设计高级副总裁。近日,记者在“PM-China首届产品经理高峰论坛”上对他做了专訪,请他分享自己的产品管理历程。 程序猿的工作 《程序猿》:据我所知。…

网页底部的版权信息_Shopify底部的版权信息(Powered by Shopify )如何删除

大多数新的Shopify商店所有者通常在一开始就遇到一个小问题。他们通常想摆脱商店页脚中的“Powered by Shopify”文本/链接。Shopify提供支持的含义是什么?Shopify是一个电子商务平台,可帮助创建和自定义电子商务商店。当您在此平台上创建商店时&#xf…

ftp 服务器 文件 连接 导出,ftp 服务器 文件 连接 导出

ftp 服务器 文件 连接 导出 内容精选换一换“数据导入”章节适用于MRS 3.x及后续版本。Loader是实现MRS与外部数据源如关系型数据库、SFTP服务器、FTP服务器之间交换数据和文件的ETL工具,支持将数据或文件从关系型数据库或文件系统导入到MRS系统中。Loader支持如下数…

自己的碎碎念

各位mmgg们,我是一个人见人爱,车载车爆胎的mm。 想知道我的年龄吗?我偷偷告诉你我正在学校和社会间徘徊(年龄大了都不好意思明说了,没错,我就是娇羞) 想知道我的职业吗?我想聪明的人…

python取绝对值数组_Python通用函数实现数组计算的方法

一.数组的运算数组的运算可以进行加减乘除,同时也可以将这些算数运算符进行任意的组合已达到效果。>>> xnp.arange(5)>>> xarray([0, 1, 2, 3, 4])>>> x5>>> xnp.arange(5)>>> x5array([5, 6, 7, 8, 9])>>> …

多个虚拟主机服务器,Windows多个虚拟主机服务器

Windows多个虚拟主机服务器 内容精选换一换迁移前,您需要设置目的端服务器。该目的端用来接收源端的数据,同时您也可以使用该目的端进行迁移测试和启动目的端。只有“迁移阶段”为“已就绪”时才可设置目的端。或单击“操作”列的“更多 > 设置目的端…

九度OJ #1437 To Fill or Not to Fil

题目描写叙述:With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations on the way from time to time. Different gas station may give different pri…

armv8 汇编 绝对地址赋值_详解汇编语言B和LDR指令与相对跳转和绝对跳转的关系...

[TOC]为什么要有相对跳转和绝对跳转?顺序执行:指令一条一条按照顺序往下执行,比如变量的定义和赋值都是按照顺序执行的。跳转执行:当指令执行到当前位置后跳转到其他位置执行。比如,在主函数中调用其他函数就是典型的跳…

BZOJ 4034: [HAOI2015]T2 树链剖分

4034: [HAOI2015]T2 Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加…