企业微信加密消息体_微信企业号开发之加密方案与全局返回码说明
本文包含了企业号回调企业时加解密的详细方案、库和示例代码的下载,以及企业号api接口返回的错误码。
一、关于加解密方案的详细说明
1、术语及说明
开启回调模式时,有以下术语需要了解:
1)msg_signature是签名,用于验证调用者的合法性
2)EncodingAESKey用于消息体的加密,长度固定为43个字符,从a-z, A-Z, 0-9共62个字符中选取,是AESKey的Base64编码。解码后即为32字节长的AESKey
3)AESKey=Base64_Decode(EncodingAESKey + “=”),是AES算法的密钥,长度为32字节。AES采用CBC模式,数据采用PKCS#7填充;IV初始向量大小为16字节,取AESKey前16字节。具体详见:http://tools.ietf.org/html/rfc2315
4)msg为消息体明文,格式为XML
5)msg_encrypt = Base64_Encode( AES_Encrypt[random(16B) + msg_len(4B) + msg + $CorpID] ),是对明文消息msg加密处理后的Base64编码
2、消息体签名
为了验证调用者的合法性,微信在回调url中增加了消息签名,以参数msg_signature标识,企业需要验证此参数的正确性后再解密。验证步骤:
1)企业计算签名:dev_msg_signature=sha1(sort(Token、timestamp、nonce、msg_encrypt))。sort的含义是将参数按照字母字典排序,然后从小到大拼接成一个字符串
2)比较dev_msg_signature和msg_signature是否相等,相等则表示验证通过。
3、加解密方案说明
对明文msg加密的过程如下:
msg_encrypt = Base64_Encode( AES_Encrypt[random(16B) + msg_len(4B) + msg + $CorpID] )
AES加密的buf由16个字节的随机字符串、4个字节的msg长度、明文msg和$CorpID组成。其中msg_len为msg的字节数,网络 字节序;$CorpID为企业号的CorpID。经AESKey加密后,再进行Base64编码,即获得密文msg_encrypt。
对应于加密方案,解密方案如下:
1)对密文BASE64解码:aes_msg=Base64_Decode(msg_encrypt)
2)使用AESKey做AES解密:rand_msg=AES_Decrypt(aes_msg)
3)验证解密后$CorpID、msg_len
4)去掉rand_msg头部的16个随机字节,4个字节的msg_len,和尾部的$CorpID即为最终的消息体原文msg。
内容导航
二、加解密库下载和返回码
1、加解密库的返回码
返回码
说明
0
请求成功
-40001
签名验证错误
-40002
xml解析失败
-40003
sha加密生成签名失败
-40004
AESKey 非法
-40005
corpid 校验错误
-40006
AES 加密失败
-40007
AES 解密失败
-40008
解密后得到的buffer非法
-40009
base64加密失败
-40010
base64解密失败
-40011
生成xml失败
2、加解密库下载及示例
c++库(点击下载)
注意事项:
1)WXBizMsgCrypt.h声明了WXBizMsgCrypt类,提供用户接入企业微信的三个接口。WXBizMsgCrypt.cpp文件提供了三个接口的实现。Sample.cpp文件提供了如何使用这三个接口的示例。
2)WXBizMsgCrypt类封装了VerifyURL, DecryptMsg, EncryptMsg三个接口,分别用于开发者验证回调url,收到用户回复消息的解密以及开发者回复消息的加密过程。使用方法可以参考Sample.cpp文件。
3)加解密协议请参考企业微信官方文档。
4)加解密过程使用了开源的openssl和tinyxml2库,请开发者自行安装之后使用。
*openssl的版本号是openssl-1.0.1h,http://www.openssl.org/
*tinyxml2的版本号是tinyxml2-2.1.0,https://github.com/leethomason/tinyxml2
python库(点击下载)
注意事项:
1)WXBizMsgCrypt.py文件封装了WXBizMsgCrypt接口类,提供了用户接入企业微信的三个接口,Sample.py文件提供了如何使用这三个接口的示例,ierror.py提供了错误码。
2)WXBizMsgCrypt封装了VerifyURL, DecryptMsg, EncryptMsg三个接口,分别用于开发者验证回调url、接收消息的解密以及开发者回复消息的加密过程。使用方法可以参考Sample.py文件。
3)本代码用到了pycrypto第三方库,请开发者自行安装此库再使用。
php库(点击下载)
注意事项:
1)WXBizMsgCrypt.php文件提供了WXBizMsgCrypt类的实现,是用户接入企业微信的接口类。Sample.php提供了 示例以供开发者参考。errorCode.php, pkcs7Encoder.php, sha1.php, xmlparse.php文件是实现这个类的辅助类,开发者无须关心其具体实现。
2)WXBizMsgCrypt类封装了VerifyURL, DecryptMsg, EncryptMsg三个接口,分别用于开发者验证回调url、接收消息的解密以及开发者回复消息的加密过程。使用方法可以参考Sample.php文件。
java库(点击下载)
注意事项:
1)com\qq\weixin\mp\aes目录下是用户需要用到的接入企业微信的接口,其中WXBizMsgCrypt.java文件提供的 WXBizMsgCrypt类封装了用户接入企业微信的三个接口,其它的类文件用户用于实现加解密,用户无须关心。sample.java文件提供了接口 的使用示例。
2)WXBizMsgCrypt封装了VerifyURL, DecryptMsg, EncryptMsg三个接口,分别用于开发者验证回调url、接收消息的解密以及开发者回复消息的加密过程。使用方法可以参考Sample.java文件。
3)请开发者使用jdk1.7以上的版本。针对org.apache.commons.codec.binary.Base64,需要导入jar包commons-codec-1.9(或comm ons-codec-1.8等其他版本),我们有提供,官方下载地址:
http://commons.apache.org/proper/commons-codec/download_codec.cgi
4)异常java.security.InvalidKeyException:illegal Key Size的解决方案:
在官方网站下载JCE无限制权限策略文件(JDK7的下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt。如果安装了JRE, 将两个jar文件放到%JRE_HOME% \lib\security目录下覆盖原来的文件,如果安装了JDK,将两个jar文件放到%JDK_HOME%\jre\lib\security目录 下覆盖原来文件。
c#库(点击下载)
注意事项:
1)Cryptography.cs文件封装了AES加解密过程,用户无须关心具体实现。WXBizMsgCrypt.cs文件提供了用户接入企业微信的三个接口,Sample.cs文件提供了如何使用这三个接口的示例。
2)WXBizMsgCrypt.cs封装了VerifyURL, DecryptMsg, EncryptMsg三个接口,分别用于开发者验证回调url、接收消息的解密以及开发者回复消息的加密过程。使用方法可以参考Sample.cs文件。
内容导航
三、全局返回码说明
企业号每次调用接口时,可能获得正确或错误的返回码,企业可以根据返回码信息调试接口,排查错误。
全局返回码说明如下:
返回码
说明
-1
系统繁忙
0
请求成功
40001
获取access_token时Secret错误,或者access_token无效
40002
不合法的凭证类型
40003
不合法的UserID
40004
不合法的媒体文件类型
40005
不合法的文件类型
40006
不合法的文件大小
40007
不合法的媒体文件id
40008
不合法的消息类型
40013
不合法的corpid
40014
不合法的access_token
40015
不合法的菜单类型
40016
不合法的按钮个数
40017
不合法的按钮类型
40018
不合法的按钮名字长度
40019
不合法的按钮KEY长度
40020
不合法的按钮URL长度
40021
不合法的菜单版本号
40022
不合法的子菜单级数
40023
不合法的子菜单按钮个数
40024
不合法的子菜单按钮类型
40025
不合法的子菜单按钮名字长度
40026
不合法的子菜单按钮KEY长度
40027
不合法的子菜单按钮URL长度
40028
不合法的自定义菜单使用员工
40029
不合法的oauth_code
40031
不合法的UserID列表
40032
不合法的UserID列表长度
40033
不合法的请求字符,不能包含\uxxxx格式的字符
40035
不合法的参数
40038
不合法的请求格式
40039
不合法的URL长度
40040
不合法的插件token
40041
不合法的插件id
40042
不合法的插件会话
40048
url中包含不合法domain
40054
不合法的子菜单url域名
40055
不合法的按钮url域名
40056
不合法的agentid
40057
不合法的callbackurl
40058
不合法的红包参数
40059
不合法的上报地理位置标志位
40060
设置上报地理位置标志位时没有设置callbackurl
40061
设置应用头像失败
40062
不合法的应用模式
40063
红包参数为空
40064
管理组名字已存在
40065
不合法的管理组名字长度
40066
不合法的部门列表
40067
标题长度不合法
40068
不合法的标签ID
40069
不合法的标签ID列表
40070
列表中所有标签(用户)ID都不合法
40071
不合法的标签名字,标签名字已经存在
40072
不合法的标签名字长度
40073
不合法的openid
40074
news消息不支持指定为高保密消息
41001
缺少access_token参数
41002
缺少corpid参数
41003
缺少refresh_token参数
41004
缺少secret参数
41005
缺少多媒体文件数据
41006
缺少media_id参数
41007
缺少子菜单数据
41008
缺少oauth code
41009
缺少UserID
41010
缺少url
41011
缺少agentid
41012
缺少应用头像mediaid
41013
缺少应用名字
41014
缺少应用描述
41015
缺少Content
41016
缺少标题
41017
缺少标签ID
41018
缺少标签名字
42001
access_token超时
42002
refresh_token超时
42003
oauth_code超时
42004
插件token超时
43001
需要GET请求
43002
需要POST请求
43003
需要HTTPS
43004
需要接收者关注
43005
需要好友关系
43006
需要订阅
43007
需要授权
43008
需要支付授权
43009
需要认证
43010
需要处于回调模式
43011
需要企业授权
44001
多媒体文件为空
44002
POST的数据包为空
44003
图文消息内容为空
44004
文本消息内容为空
45001
多媒体文件大小超过限制
45002
消息内容超过限制
45003
标题字段超过限制
45004
描述字段超过限制
45005
链接字段超过限制
45006
图片链接字段超过限制
45007
语音播放时间超过限制
45008
图文消息超过限制
45009
接口调用超过限制
45010
创建菜单个数超过限制
45015
回复时间超过限制
45016
系统分组,不允许修改
45017
分组名字过长
45018
分组数量超过上限
46001
不存在媒体数据
46002
不存在的菜单版本
46003
不存在的菜单数据
46004
不存在的员工
47001
解析JSON/XML内容错误
48002
Api禁用
50001
redirect_uri未授权
50002
员工不在权限范围
50003
应用已停用
50004
员工状态不正确(未关注状态)
50005
企业已禁用
60001
部门长度不符合限制
60002
部门层级深度超过限制
60003
部门不存在
60004
父亲部门不存在
60005
不允许删除有成员的部门
60006
不允许删除有子部门的部门
60007
不允许删除根部门
60008
部门名称已存在
60009
部门名称含有非法字符
60010
部门存在循环关系
60011
管理员权限不足,(user/department/agent)无权限
60012
不允许删除默认应用
60013
不允许关闭应用
60014
不允许开启应用
60015
不允许修改默认应用可见范围
60016
不允许删除存在成员的标签
60017
不允许设置企业
60102
UserID已存在
60103
手机号码不合法
60104
手机号码已存在
60105
邮箱不合法
60106
邮箱已存在
60107
微信号不合法
60108
微信号已存在
60109
QQ号已存在
60110
部门个数超出限制
60111
UserID不存在
60112
成员姓名不合法
60113
身份认证信息(微信号/手机/邮箱)不能同时为空
60114
性别不合法
企业微信加密消息体_微信企业号开发之加密方案与全局返回码说明相关推荐
- 企业微信加密消息体_微信公众平台开发者中心安全模式消息体加解密实现
关键字:微信公众平台 消息体签名 消息体加解密 EncodingAESKey 安全模式 一.消息体加解密 微信公众平台在配置服务器时,提供了3种加解密的模式供开发者选择,即明文模式.兼容模式.安全模式 ...
- 企业微信加密消息体_无代码开发能保障企业系统数据的安全吗?这篇文章为你全面解析!...
轻流<无代码开发白皮书>是从五年来的行业探索经验出发,对比研究了管理软件不同开发方式的优劣,总结了管理软件未来的发展趋势,并率先对无代码开发理念进行系统性阐述:详细解读了无代码开发广阔的应 ...
- 微信企业号开发之加密方案与全局返回码说明
本文包含了企业号回调企业时加解密的详细方案.库和示例代码的下载,以及企业号api接口返回的错误码. 一.关于加解密方案的详细说明 1.术语及说明 开启回调模式时,有以下术语需要了解: 1)msg_si ...
- 企业微信加密消息体_加解密方案的详细说明
关于加解密方案的详细说明 术语及说明 开启回调模式时,有以下术语需要了解: 1.msg_signature是签名,用于验证调用者的合法性.具体算法见以下'消息体签名'章节 2.EncodingAESK ...
- 企业微信加密消息体_加解密方案说明
[TOC] 概述 企业微信在推送消息给企业时,会对消息内容做AES加密,以XML格式POST到企业应用的URL上. 企业在被动响应时,也需要对数据加密,以XML格式返回给企业微信. 本章节即是对加解密 ...
- 企业微信加密消息体_企业微信机器人怎么发消息?企业微信机器人可以定时发消息吗?...
企业微信外部群自带群机器人功能,可以协助员工高效管理社群,帮助我们运营客户,那么企业微信机器人怎么用呢? 使用企业微信机器人,需要管理员先进入企业微信管理后台,在[客户联系]-[效率工具]-[自动回复 ...
- 企业微信加密消息体_用企业微信小程序发送消息
在企业开发中,经常会碰到一些消息要及时推送到企业员工的手中.so 下面来说怎么向企业微信中的员工发消息. 本人只是记录下开发过程,详细参考https://work.weixin.qq.com/api/ ...
- java 微信发送模板的_微信开发:微信发送模板消息代码示例
最近一个微信开发的项目里需要发送微信模板消息给卖家或者供应商等,微信开发其实也就按照微信的官方接口要求组装起来即可,下面简单介绍一下我的微信模板发送代码. 1.获取access token,至于acc ...
- 微信链接修改图片_微信链接修改图标
自定义链接是什么?微信链接修改图片_微信链接修改图标 自定义微信分享链接是指将一条网页链接通过微信接口生成一张卡片,并且该卡片的标题,内容和图片都可以自己编辑.如下图效果 ● 未自定义的网页链接 ● ...
最新文章
- 上海往事之参加上海分公司组织的TeamBuilding
- CISCO路由器的恢复方法
- JAVA入门到精通-第71讲-学生管理系统3-增删改查
- 在Filter 无法跳转地址
- [禅悟人生]越忙的人时间越多
- 【Flutter】自定义 Flutter 组件 ( 创建自定义 StatelessWidget、StatefulWidget 组件 | 调用自定义组件 )
- fedora linux操作系统安装,Fedora-10 Linux操作系统的安装,Fedora Linux的安装锦集收藏,图文并茂详解...
- Vitis学习记录(一)
- 在hive中对日期数据进行处理,毫秒级时间转化为yyyy-MM-dd格式
- 阿里云天池 金融风控训练营Task1 广东工业站
- 酒泉于洋计算机学校,于洋
- 九日登望仙台呈刘明府 [唐] 崔曙
- easyui 常用的属性
- Windows mobile美化之-短信界面美化修改~
- css文本缩进两个字符,css如何设置首行缩进2个字符
- 如何使用kettle将EXCEL导入数据库
- 【Unity3D-UGUI原理篇】(二)Canvas Scaler 缩放原理
- TSL1401 CCD传感器驱动
- Oracle - Database 甲骨文
- 实施 ORM 的两项要旨:泛型和反射