后端使用nodejs開發,node版本v10.16.0。
廢話不多說直接上干貨~~~~~~
首先看一下釘釘官方文檔中的釘釘簽名例子:
- timestamp=1546084445901
- appSecret=testappSecret
- signature=HCbG3xNE3vzhO+u7qCUL1jS5hsu2n5r2cFhnTrtyDAE=
- urlEncode后的signature=HCbG3xNE3vzhO%2Bu7qCUL1jS5hsu2n5r2cFhnTrtyDAE%3D
現在要做的就是根據釘釘官方給出的例子,加密之后能夠匹配的上。
在上代碼之前,需要引入的包文件:
1、crypto包:用於加密簽名,我用的版本是:1.0.1
2、urlencode包:用於轉換密文,我用的版本:1.1.0
下方是代碼段:
const crypto = require('crypto');
const urlencode = require('urlencode');
//這個是請求釘釘簽名接口的參數 let requestData = { tmp_auth_code:code }; //官方例子中的時間戳 let timestamp="1546084445901"; //官方例子中的appSecret碼 let appSecret="testappSecret"; //設置appSecret為"sha256"加密的密鑰 let hash_256 = crypto.createHmac("sha256",appSecret); //對時間戳進行加密,並使用“base64”輸出 let signature = hash_256.update(new Buffer(timestamp).toString("utf8"),'utf8').digest("base64"); console.log("加密結果:",signature); //對加密密文進行urlEncode轉化【之所以對密文要轉換,是擔心密文中有非法字符】 let urlSignature =urlencode(signature); console.log("urlencode轉換:",urlSignature);
到這里,對官方給出的示例進行簽名加密就結束了。加密的結果和官方示例中是一樣的。