wxcrypt
微信公众号和企业号接收消息和事件时用于加解密的类,即官方的WXBizMsgCrypt
类。(NodeJS版本)
目录
安装
$ npm install wxcrypt
引入
ES6:
;
Typescript:
;
NodeJS:
const WXBizMsgCrypt = ;
使用
初始化加解密类
/** * @param * @param * @param */token encodingAESKey appid;
验证URL函数
注意:本方法仅企业微信可用
本函数实现:
- 签名校验
- 解密数据包,得到明文消息内容
/** * 验证URL函数(仅用于企业微信) * @param * @param * @param * @param * @return */
解密函数
本函数实现:
- 签名校验
- 解密数据包,得到明文消息结构体
/** * @param * @param * @param * @param * @return */
加密函数
本函数实现:
- 加密明文消息结构体
- 生成签名
- 构造被动响应包
/** * 加密函数 * @param * @param * @param * @return */
错误处理
调用方法时,如有错误,则会在错误对象上加上两个属性:
errcode
数字类型的错误码errmsg
错误描述
目前支持的错误码如下:
错误码 | 错误描述 |
---|---|
-40001 | 签名验证错误 |
-40002 | xml解析失败 |
-40003 | sha加密生成签名失败 |
-40004 | AESKey 非法 |
-40005 | appid/corpid 校验错误 |
-40006 | AES 加密失败 |
-40007 | AES 解密失败 |
-400011 | 生成xml失败 |
相关链接:
- 微信公众平台技术文档《消息加解密接入指引》
- 企业微信开发文档《加解密方案说明》
辅助函数
除了对WXBizMsgCrypt的实现,本项目还提供几个辅助函数。
sign
签名函数-传入若干个字符串,用于生成签名。可用于公众号url签名校验。具体算法为:
引入
; // ES6const sign = ; // CommonJS
使用
sign...args: string: string;
o2x
对象转XML字符串-传入任意对象,生成xml字符串。
注意:
- 支持的基本类型有
string
和number
,非法类型和null
会被转成空字符串- 最外层可以是对象、数组或基本类型
- 数组项会用
<item>
标签包起来
引入
; // ES6const o2x = ; // CommonJS
使用
o2xobj: any: string
示例1:数组的处理
数组项将用<item>
标签包裹,并成为兄弟节点
将返回如下字符串(格式化之后):
1536123965810 Article1 Description1 Article2 Description2
示例2:特殊字符的处理
函数自动判断特殊字符的处理方式(使用CDATA或转义),具体如下:
- 含有特殊字符(
<>&'"
)时,使用CDATA处理 - 含有
]]>
时,由于会和CDATA冲突,使用转义处理
将返回如下字符串(格式化之后):
video <![CDATA["愤怒"的小鸟]]> ]]><[[
x2o
XML字符串转对象-传入xml字符串,生成js对象
注意:
- 虽然xml最外层应该只有一个根节点,但这不是强制的
- 除了
<item>
标签,兄弟节点的标签名不可以相同<item>
标签代表数组项,不可以与其他标签成为兄弟节点- 所有的文本节点都会转化为字符串(而不是数字或布尔类型)
引入
; // ES6const x2o = ; // CommonJS
使用
x2oxml: string: any
<item>
标签节点的处理
示例:每个<item>
标签节点将转成一个数组项,且支持嵌套
将返回如下对象:
xml: timestamp: '1536123965810' articles: title: 'Article1' desc: 'Description1' title: 'Article2' desc: 'Description2'