Node.js实现微信公众平台开发:从环境搭建到签名验证

作者:终端旅客

时间:2026-10-29

浏览:665

本文详细介绍如何使用Node.js进行微信公众平台开发。内容涵盖从注册公众号、搭建Node.js运行环境,到配置Express框架接收HTTP请求的全过程。重点解析微信服务器签名验证机制,包括Token、Timestamp和Nonce的字典序排序及SHA1加密校验,帮助开发者实现消息的合法接收与响应。

文章目录

Node.js微信公众平台开发概述

如何利用Node.js技术实现微信公众平台的开发功能?

此处省略其他背景介绍,首先简要说明微信公众平台的基本工作原理。

微信服务器在此过程中充当转发服务器的角色。终端设备(如手机、Pad等)发起请求至微信服务器,微信服务器随后将请求转发给开发者自定义的服务端(即具体实现逻辑)。服务端处理完业务逻辑后,将响应返回给微信服务器,最后由微信服务器将具体响应内容回复至终端设备。整个通信过程基于HTTP协议,数据交互格式为XML。具体流程如下图所示:

Node.js微信公众平台开发概述

实际上,开发者的核心任务是对接收到的HTTP请求做出响应。具体而言,需要按照特定的XML格式解析请求内容,处理完毕后,再按照相同的XML格式返回响应数据。

平台注册与基础设置

平台注册

进行微信公众平台开发的前提是拥有一个已注册的微信公众平台账号。注册步骤如下:访问微信公众平台官网 https://mp.weixin.qq.com/,点击“立即注册”按钮。

随后根据页面提示填写基本信息,通过邮箱激活账号,选择账号类型,完成信息登记及公众号信息设置,即可完成注册流程。

注册完成后,需对公众号进行基础设置。登录公众号后台,进入【公众号设置】栏目,配置头像及其他相关信息。

Node.js环境搭建与模块安装

Node.js环境搭建

我们需要在公网环境中部署一台服务器,用于启动Node.js运行环境。环境启动后,通过配置访问地址,即可接收微信服务器发送的消息,并能向微信服务器发送响应消息。

在公网服务器上安装Node.js后,还需安装若干必要模块,例如express、node-xml、jssha等。这些模块可通过npm命令进行安装。

接下来,我们将使用Node.js实现与微信服务器的消息收发功能,以及微信服务器要求的签名认证机制。

在当前的编辑环境中,Node.js环境已预先安装完毕。接下来的内容将重点演示如何实现微信服务器的签名认证逻辑。

Express框架创建与路由配置

创建Express框架

在前面的课程中,我们已经安装了express模块,并且当前环境中已存在一个名为app.js的文件。现在,我们需要在该文件中搭建Express框架,代码如下:


var express = require("express");
var path=require('path');
var app = express();
server = require('http').Server(app);
app.set('views',__dirname); // 设置视图 
app.set('view engine', 'html'); 
app.engine( '.html', require( 'ejs' ).__express );
require('./index')(app); //路由配置文件
server.listen(80,function(){
console.log('App start,port 80.');
});

接着,添加一个名为test.html的文件,并写入以下内容:


<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>汇智网</title>
</head>
<body>
<div><%=issuccess%></div>
</body>
</html>

此外,还需添加一个名为index.js的文件来实现路由逻辑。在编辑环境中点击“添加文件”按钮创建该文件,并写入以下代码。其中,GET请求用于验证配置URL的合法性,POST请求用于处理微信发送的具体消息内容。


module.exports = function(app){
app.get('/',function(req,res){
res.render('test',{issuccess:"success"})
});
app.get('/interface',function(req,res){});
app.post('/interface',function(req,res){});
}

至此,所需的Express框架搭建完成。当然,开发者还可以添加public公共文件夹及所需的中间件。保存文件后,点击【提交运行】,再点击【访问测试】进行验证。请记录访问测试的地址,该地址将在下一节中使用。

微信服务器配置与启用

微信服务器配置

登录微信公众平台,在开发者模式下的基本配置区域,找到服务器配置选项并进行修改,如图所示:

Node.js微信公众平台开发概述

首先,URL字段需填写公网服务器上Node.js接收与发送数据的路径。可以填写上一节中【访问测试】得到的地址,并追加相应的路由路径。

Token字段必须与自定义服务器端设置的token值保持一致。填写完成后,点击提交。在提交之前,需确保已启动app.js(点击【提交运行】)。此时,系统将根据路由匹配规则验证签名是否有效。

配置完成后,务必点击启用配置,使设置生效。

Node.js微信公众平台开发概述

网址接入与签名验证流程

网址接入

当公众平台用户提交信息后,微信服务器会向填写的URL发送GET请求,并附带以下四个参数:

参数描述如下: signature:微信加密签名 timestamp:时间戳 nonce:随机数 echostr:随机字符串

开发者需通过检验signature对请求进行校验(校验方法见下文)。若确认该GET请求确实来自微信服务器,请原样返回echostr参数内容,则接入生效;否则接入失败。

signature是由开发者填写的token参数与请求中的timestamp参数、nonce参数结合生成的。

加密/校验流程如下:

1、将token、timestamp、nonce三个参数进行字典序排序; 2、将排序后的三个参数字符串拼接成一个字符串,并进行SHA1加密; 3、开发者将获得的加密后字符串与signature进行对比,若一致,则标识该请求来源于微信。 参数排序

首先确认请求是来自微信服务器的GET请求,随后在index.js文件中进行代码添加。具体位置在app.get('/interface', function(req, res){});函数的内部。

首先获取各个参数的值,代码如下:


var token="weixin";
var signature = req.query.signature;
var timestamp = req.query.timestamp;
var echostr = req.query.echostr;
var nonce = req.query.nonce;

在此处设置token变量,使其值与微信服务器中配置的token保持一致。

随后对token、timestamp、nonce三个参数进行排序,代码如下:


var oriArray = new Array();
oriArray[0] = nonce;
oriArray[1] = timestamp;
oriArray[2] = token;
oriArray.sort();

至此,参数排序步骤完成。

参数加密

在上节中已完成参数排序,本节需将参数组成一个字符串并进行SH-1加密。在加密前需使用jssha模块,并在文件中引用该模块。


var jsSHA = require('jssha');

上一节课中已完成参数排序并存放于数组中,此处可通过join方法生成字符串,代码如下:


var original = oriArray.join('');

最后对该数据进行加密处理,代码如下:


var jsSHA = require('jssha');
var shaObj = new jsSHA(original, 'TEXT');
var scyptoString=shaObj.getHash('SHA-1', 'HEX'); 

这样便生成了所需的签名字符串scyptoString。

签名对比

已获得目标签名字符串scyptoString后,即可将其与来自微信服务器的signature进行对比。若对比通过,则成功接收与发送消息。


 if(signature == scyptoString){
 //验证成功
 } else {
 //验证失败
 }

本文内容已整理至《JavaScript微信开发技巧汇总》,欢迎读者学习阅读。

为大家推荐当前关注度较高的微信小程序教程:《微信小程序开发教程》。本文经精心整理,希望读者喜欢。

以上就是本文的全部内容,希望对大家的学习有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章