本文包含了企业号回调企业时加解密的详细方案、库和示例代码的下载,以及企业号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

性别不合法

企业微信加密消息体_微信企业号开发之加密方案与全局返回码说明相关推荐

  1. 企业微信加密消息体_微信公众平台开发者中心安全模式消息体加解密实现

    关键字:微信公众平台 消息体签名 消息体加解密 EncodingAESKey 安全模式 一.消息体加解密 微信公众平台在配置服务器时,提供了3种加解密的模式供开发者选择,即明文模式.兼容模式.安全模式 ...

  2. 企业微信加密消息体_无代码开发能保障企业系统数据的安全吗?这篇文章为你全面解析!...

    轻流<无代码开发白皮书>是从五年来的行业探索经验出发,对比研究了管理软件不同开发方式的优劣,总结了管理软件未来的发展趋势,并率先对无代码开发理念进行系统性阐述:详细解读了无代码开发广阔的应 ...

  3. 微信企业号开发之加密方案与全局返回码说明

    本文包含了企业号回调企业时加解密的详细方案.库和示例代码的下载,以及企业号api接口返回的错误码. 一.关于加解密方案的详细说明 1.术语及说明 开启回调模式时,有以下术语需要了解: 1)msg_si ...

  4. 企业微信加密消息体_加解密方案的详细说明

    关于加解密方案的详细说明 术语及说明 开启回调模式时,有以下术语需要了解: 1.msg_signature是签名,用于验证调用者的合法性.具体算法见以下'消息体签名'章节 2.EncodingAESK ...

  5. 企业微信加密消息体_加解密方案说明

    [TOC] 概述 企业微信在推送消息给企业时,会对消息内容做AES加密,以XML格式POST到企业应用的URL上. 企业在被动响应时,也需要对数据加密,以XML格式返回给企业微信. 本章节即是对加解密 ...

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

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

  7. 企业微信加密消息体_用企业微信小程序发送消息

    在企业开发中,经常会碰到一些消息要及时推送到企业员工的手中.so 下面来说怎么向企业微信中的员工发消息. 本人只是记录下开发过程,详细参考https://work.weixin.qq.com/api/ ...

  8. java 微信发送模板的_微信开发:微信发送模板消息代码示例

    最近一个微信开发的项目里需要发送微信模板消息给卖家或者供应商等,微信开发其实也就按照微信的官方接口要求组装起来即可,下面简单介绍一下我的微信模板发送代码. 1.获取access token,至于acc ...

  9. 微信链接修改图片_微信链接修改图标

    自定义链接是什么?微信链接修改图片_微信链接修改图标 自定义微信分享链接是指将一条网页链接通过微信接口生成一张卡片,并且该卡片的标题,内容和图片都可以自己编辑.如下图效果 ● 未自定义的网页链接 ● ...

最新文章

  1. 上海往事之参加上海分公司组织的TeamBuilding
  2. CISCO路由器的恢复方法
  3. JAVA入门到精通-第71讲-学生管理系统3-增删改查
  4. 在Filter 无法跳转地址
  5. [禅悟人生]越忙的人时间越多
  6. 【Flutter】自定义 Flutter 组件 ( 创建自定义 StatelessWidget、StatefulWidget 组件 | 调用自定义组件 )
  7. fedora linux操作系统安装,Fedora-10 Linux操作系统的安装,Fedora Linux的安装锦集收藏,图文并茂详解...
  8. Vitis学习记录(一)
  9. 在hive中对日期数据进行处理,毫秒级时间转化为yyyy-MM-dd格式
  10. 阿里云天池 金融风控训练营Task1 广东工业站
  11. 酒泉于洋计算机学校,于洋
  12. 九日登望仙台呈刘明府 [唐] 崔曙
  13. easyui 常用的属性
  14. Windows mobile美化之-短信界面美化修改~
  15. css文本缩进两个字符,css如何设置首行缩进2个字符
  16. 如何使用kettle将EXCEL导入数据库
  17. 【Unity3D-UGUI原理篇】(二)Canvas Scaler 缩放原理
  18. TSL1401 CCD传感器驱动
  19. Oracle - Database 甲骨文
  20. 实施 ORM 的两项要旨:泛型和反射

热门文章

  1. webView加载全景图
  2. 对耦合电容、极间电容、旁路电容、去耦电容的理解小结
  3. 推荐系统学习笔记-FNN
  4. 关于H5移动端用什么自动化测试
  5. NR LDPC 03- Tanner
  6. 第二天 05-安装win7系统与远程桌面开启
  7. 一种高效的q+1准均匀量化(quasi-uniform quantization)方法及MATLAB实现
  8. 计算机高水平竞赛,国际类高水平的竞赛有哪些?
  9. 软考中级软件设计笔记
  10. C语言算法题:简单密码