重要提示
在我完成本项目的时候突然意识到会不会有工具能完成将nodejs模块转译为web api支持的函数,然后就在这篇文章中介绍了几种方法,想要使用本依赖的用户可以参考参考,实在不行也可以再使用本依赖。
前言
本章内容主要针对企业微信接受消息部分.虽然企业微信官方和第三方提供的加解密库,但是它们都只能Nodejs环境使用,无法在浏览器和Edge边缘计算环境使用.且官方的库说明文档及其简陋(可以说是没有),所以自己对其使用Ts进行了重构,使其可以在浏览器和Edge边缘计算环境使用,且附上更加详细的文档。
简介
EdgeWeComCrypto是专门针对企业微信在边缘计算领域重新编写的库,主要实现了消息加密、解密和域验证。利用Web标准API,它可以在CloudFlare
Workers、Vercel、Deno、BUN等平台上无缝运行,确保微信消息的安全传输和验证。
使用方法
NPM
- 使用npm安装
1 | npm i edgewecomcrypto |
- 示例
1 | import {decrypt} from "edgewecomcrypto"; |
CDN
- 导入
1 | <script src="https://gcore.jsdelivr.net/gh/1802024110/EdgeWecomCrypto/dist/index.min.js"></script> |
- 示例
1 | const encryptMsg = "CH0HBGa+pgJEdeHMFNghyqbf1TJSg+W7vVx/6HThtdfrK3CLYGhEcUC/2Ayfecgck+/MxeRNOb0ZgtBzIBZso4+2LZU11zLQyDx++txixg7tYDrnE/aicQo65AdR6vMcBFb47xUK8vjC8EbQElQhzlVcb9QOlTLYIw6eAksyAJ85WL2XPha0Q5MgiowUSD98movbhdwGc3SV580qhQWtNZsVAp2ghi2EcNPxk36a8itTtlZsPHXcdy1mR4HhYlSrZVhlnz4mkfzVu9zo0wVu1zQ9JT2iKMaeDSya6C7ffZWwY1CXBeWnTpf4urs7GvFyMM6n8vVHCTHRFXGpHfvxccWvz0YgR75xjTpUzk6nOID1s761/efsymuPNLkZ5XCw453pErAloXiMMJ3SED+UMA==" |
函数
获取签名 (getSignature)
获取签名。
token: 令牌timestamp: 时间戳nonce: 随机数echostr: 加密数据
返回一个 Promise,包含签名字符串。
解密 (decrypt)
解密。
encodingAESKey: EncodingAESKeyencryptTxt: 密文
返回一个对象,包含解密后的信息:
id: 解密后的IDmessage: 解密后的消息random: 解密后的随机数
示例
1 | import {decrypt} from "edgewecomcrypto"; |
加密 (encrypt)
此函数未测试(因为没有域名可用来测试)
,大概率是存在问题的,如果不能正常运行请参考官方文档
自行修改,欢迎将修改后的代码提交PR。
使用AES加密算法加密给定的消息。
encodingAESKey: 用于加密的AES密钥,Base64编码。message: 需要加密的消息。corpid: 企业ID。random(可选): 随机数,默认为16字节。
返回加密后的消息,Base64编码。
示例
1 | import {encrypt} from "edgewecomcrypto"; |
获取JS-SDK的签名 (getJsApiSignature)
获取JS-SDK的签名,也就是被动回复消息里面的 MsgSignature 参数。
jsapi_ticket: JS-SDK票据url: 当前网页的URL,包含结尾的/,不包含#及其后面部分。需要在企业微信后台配置可信域名。nonceStr(可选): 随机字符串,长度为32个字符以下。timestamp(可选): 当前时间戳(单位:秒)。
返回一个 Promise,包含签名字符串。
获取账户的access_token (getAccessToken)
获取账户的access_token。
corpid: 企业IDcorpsecret: 应用的凭证密钥
返回一个 Promise,包含access_token字符串。有效期7200秒。
获取账户的jsapi_ticket (getJsapiTicket)
获取账户的jsapi_ticket。
access_token: 账户的access_token
返回一个 Promise,包含jsapi_ticket字符串。一小时内,一个企业最多可获取400次,且单个应用不能超过100次。