/wechat-encrypt

微信开放平台会话消息加解密模块

Primary LanguageJavaScript

wechat-encrypt

WeChat open platform session message encryption and decryption module.

微信开放平台会话消息加解密模块。

Usage

npm install wechat-encrypt -S
const Encrypt = require('wechat-encrypt')

const encrypt = new Encrypt({
  appId: 'wxf1569d816b304d28',
  encodingAESKey: 'WO3Gcs2X5lcNtZagAcaRRjNaAwEmoekP1P2aOKR4W3D',
  token: 'weixin'
})

// 如何解密微信传过来的请求body中的Encrypt

console.log(Http_body)

/*
<xml>
    <ToUserName><![CDATA[gh_3db049ae940a]]></ToUserName>
    <Encrypt><![CDATA[XpHWFFBEWSZBmKJvj03anXGY5dEViwYBBnTaPyUkoKzPm1fxcCEv0BwvX+7EFywVTkwQNqFpBqKZj23vJ1QgXi2SshJyvov1hiGfSTIUi2dWpoqH8I2Zhw9XwIkzrOnitGb3vdUAVkSwRTBWtxyTIg3JJPVJPwpLXTYUR+4G2wk5+SIVhBNoepGx7ZwUHK5Sv8ReEDDBwzeFlHl2SAeNA6sH+jvnY8mwNUOxe2fGXge0TteO3U6UWpExJeYuPQIrqNofLcAbPUr7IVkfsm2jqBIH6gWxddNA9U+N0lbQgqKR3LTClM+9GLQFUNLgY7WFyeoZDTIoj8F06uHQTqVd6sGETnFp+c0ff2UQb9bEkJWpZOKnA0cKacw7JyiOUfYmETAdSk6ffULXzqYOYCYlSLxzuFkfO62/hmiHGaMslGNYtwx5Zv31G9kd+Qi1SpGaYJn2q5McnTmht3ptyTyvmQ==]]></Encrypt>
</xml>
*/

const xmlMsg = encrypt.decode('XpHWFFBEWSZBmKJvj03anXGY5dEViwYBBnTaPyUkoKzPm1fxcCEv0BwvX+7EFywVTkwQNqFpBqKZj23vJ1QgXi2SshJyvov1hiGfSTIUi2dWpoqH8I2Zhw9XwIkzrOnitGb3vdUAVkSwRTBWtxyTIg3JJPVJPwpLXTYUR+4G2wk5+SIVhBNoepGx7ZwUHK5Sv8ReEDDBwzeFlHl2SAeNA6sH+jvnY8mwNUOxe2fGXge0TteO3U6UWpExJeYuPQIrqNofLcAbPUr7IVkfsm2jqBIH6gWxddNA9U+N0lbQgqKR3LTClM+9GLQFUNLgY7WFyeoZDTIoj8F06uHQTqVd6sGETnFp+c0ff2UQb9bEkJWpZOKnA0cKacw7JyiOUfYmETAdSk6ffULXzqYOYCYlSLxzuFkfO62/hmiHGaMslGNYtwx5Zv31G9kd+Qi1SpGaYJn2q5McnTmht3ptyTyvmQ==')

console.log(xmlMsg)

/*
<xml><ToUserName><![CDATA[gh_3db049ae940a]]></ToUserName>
<FromUserName><![CDATA[ozKDGv3BQsXV2WDNDynsLnueAujU]]></FromUserName>
<CreateTime>1502784210</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[Hello World!]]></Content>
<MsgId>6454409035319957426</MsgId>
</xml>
*/

// 如何加密xml文本

const encodeStr = encrypt.encode(xmlMsg)
console.log(encodeStr)

/*
XpHWFFBEWSZBmKJvj03anXGY5dEViwYBBnTaPyUkoKzPm1fxcCEv0BwvX+7EFywVTkwQNqFpBqKZj23vJ1QgXi2SshJyvov1hiGfSTIUi2dWpoqH8I2Zhw9XwIkzrOnitGb3vdUAVkSwRTBWtxyTIg3JJPVJPwpLXTYUR+4G2wk5+SIVhBNoepGx7ZwUHK5Sv8ReEDDBwzeFlHl2SAeNA6sH+jvnY8mwNUOxe2fGXge0TteO3U6UWpExJeYuPQIrqNofLcAbPUr7IVkfsm2jqBIH6gWxddNA9U+N0lbQgqKR3LTClM+9GLQFUNLgY7WFyeoZDTIoj8F06uHQTqVd6sGETnFp+c0ff2UQb9bEkJWpZOKnA0cKacw7JyiOUfYmETAdSk6ffULXzqYOYCYlSLxzuFkfO62/hmiHGaMslGNYtwx5Zv31G9kd+Qi1SpGaYJn2q5McnTmht3ptyTyvmQ==
*/

new Encrypt(options)

options 参数
名称 类型 必填 描述
appId String 微信公众号appId。
token String 微信公众号后台设置的token。
encodingAESKey String 微信公众号后台设置的encodingAESKey。

方法

encode

encode(xmlMsg) 传入xml文本,返回加密后的base64字符串。

decode

decode(msg_encrypt) 传入微信请求body中的Encrypt字段值,返回解密后的xml字符串。

verify

verify(data) 检验消息的完整性。传入微信请求query中的timestamp, nonce, msg_signature和请求body中的Encrypt 返回检验结果truefalse

data 参数
名称 类型 必填 描述
timestamp String 请求query中的timestamp。
nonce String 请求query中的nonce。
msg_signature String 请求query中的msg_signature。
msg_encrypt String 请求body中的Encrypt。

getSignature

getSignature(data) 生成msg_signature。传入微信请求query中的timestamp, nonce和请求body中的Encrypt ,返回生成的signature

data 参数
名称 类型 必填 描述
timestamp String 请求query中的timestamp。
nonce String 请求query中的nonce。
msg_encrypt String 请求body中的Encrypt。