如何用 nodejs 进行 sha1 加密验证,微信公众号开发验证
一、问题
今天在摆弄微信公众号的时候,遇到这样一个问题:
我的后台是 nodejs 写的,express
框架,官方开发接入的验证代码是 php 写的,其中有一个部分是要将一个字符串进行 sha1
加密,那么 nodejs 如何加密呢?
二、方法
不需要添加任何其它包, nodejs 自带这加密算法,在 crypto
包中,具体使用方法是这样的:
const crypto = require('crypto')
let shasum = crypto.createHash('sha1')
let generatedSignature = shasum.update(要加密的字符串).digest('hex')
完整的校验方法是这样的,这个方法只是校验是否来自微信官方,在确认来自微信官方后,你需要返回验证请求中 echostr
字符串,具体查看微信官方对于如何接入的说明,
对应官方的 微信公众号接入教程
// 验证是否来自微信官方
function checkWxAuthorization(req){
let signature = req.query.signature // 微信加密签名
let timestamp = req.query.timestamp // 时间戳
let nonce = req.query.nonce // 随机数
let tempArray = [configProject.wxToken, timestamp, nonce].sort()
let tempVerifiedStr = tempArray.join('')
let shasum = crypto.createHash('sha1')
let generatedSignature = shasum.update(tempVerifiedStr).digest('hex')
console.log('signature: ', signature)
console.log('signature.length: ', signature.length)
console.log('generatedSignature: ', generatedSignature)
console.log('generatedSignature.length: ', generatedSignature.length)
console.log( 'generatedSignature === signature: ',generatedSignature === signature)
return generatedSignature === signature
}
最终的记录是这样
三、结果
这样我的后台就接入成功了