【Node.js 微信公众号实战】1.Node.js 接入微信公众平台开发

1、写在前面的话

  Node.js是一个开放源代码、跨平台的JavaScript语言运行环境,采用Google开发的V8运行代码,使用事件驱动、非阻塞和异步输入输出模型等技术来提升性能,可优化应用程序的传输量和规模。这些技术一般用于数据密集的事实应用程序。—— 来自维基百科

  最近花了差很少近一个月的时间去学习Node.js,因为它的代码语言是 Javascript ,所以对于语法上就没有过多的去研究,毕竟作过Web开发的程序员,不多有不会Javascript的。而写这篇文章,也只是为了
记录装逼的过程javascript

若有不正确的地方,但愿你们指正。html

2、准备工做

  在正式开始码代码以前,咱们须要准备如下东西:java

  1. 搭建 Node 环境。Node的安装过程太过简单,网上也有太多的教程,你们能够自行百度;
  2. 申请微信公众号,一样这里也不作介绍,你们自行百度。
  3. 服务器和域名。
  4. 打开 Node.js中文网文档
  5. 打开 微信开发者文档

3、接入微信公众平台

1.建立Node.js 项目

  首先咱们在电脑的任意磁盘上建立文件夹,命名随意,我这命名为 wechat;
  随后在文件夹中建立两个文件,一个是config.json,另外一个为app.js。以下图所示:
Node.js项目
PS:这里个人 IDE 是 VSCode,各位可随意使用本身喜欢的 IDE。node

  为了后续功能的扩展,我加入了Express框架,具体操做以下:git

  1. 电脑打开运行界面,快捷键为:win+R,输入cmd后回车,进入dos界面,输入命令
npm install -g express

进行全局安装;因为 Express 自 4.x 版本中将命令工具分离出来,所以还须要输入下一个命令程序员

npm install -g express-generator@4

安装成功后,在dos界面中输入如下 命令github

express -h

结果以下图所示:express

express 安装成功

震惊什么?你的运行结果提示:express不是内部或外部命令。那你必需要检查一下安装 node.js 的时候有没有添加环境变量。点击解决express不是内部或外部命令问题npm

2.微信文档步骤

  若是在没有考虑清楚以前,就开始码代码的话,这样作是很是危险的。咱们先打开微信文档,点击 开始开发 中的 接入指南,如图:
接入指南json

跳过第一步,直接看第二步,如图:
验证消息来自微信服务器

正如帮助文档所说的那样,咱们总结以四个步骤:

  1. 获取微信服务器Get请求的参数 signature、timestamp、nonce、echostr
  2. 将token、timestamp、nonce三个参数进行字典序排序
  3. 将三个参数字符串拼接成一个字符串进行sha1加密
  4. 开发者得到加密后的字符串可与signature对比,标识该请求来源于微信

3.接入功能的实现

   整理好思路后咱们就按照上一节的步骤去实现。首先咱们在打开 config.json 文件,输入如下内容:

{
    "token":"wechat"
}

   config.json 文件是咱们程序的配置文件,在后面的文章中,咱们会将程序名称、微信定义的参数名称、请求地址等配置内容存放在该文件中。
   打开 app.js 文件,该文件属于咱们程序的入口,在文件启动及之后路由配置都是再次实现的,首先咱们导入重要的模块:

const express = require('express'), //express 框架 
       crypto = require('crypto'),  //引入加密模块
       config = require('./config');//引入配置文件

上面的代码不难理解,require 就是导入模块的意思。这里主要针对咱们自定义的config.json文件讲解一下:
 "./" 表示与 app.js 在同一及目录下,为何要这么写呢?缘由很简单就是在咱们经过 npm 命令安装模块时,若是咱们指定了全局安装,也就是 -g,安装后的文件则会保存在咱们 node.js 安装路径下的 node_modules 文件夹中;同理,咱们不指定全局安装,安装后的文件则会保存在咱们安装命令输入时所在的文件夹根目录下的 node_modules 文件夹中,此时若是没有该文件,系统会自动建立。

 这里咱们都是使用 require 去导入模块的,node.js 怎么分辨系统模块和咱们自定义的模块呢,聪明的你必定想到了,没错就是 "./" 这个,若是你不想用它的话,你也能够把自定义的模块文件移到 node_modules 文件夹中。

  require 是经过模块名称去导入模块文件的,所以在引入的时候不须要写入文件的后缀名。若是两个文件重名,但后缀名不一样, require 会按照 Node.js 的加载优先级顺序进行导入,即 js文件 > json文件 > node文件。

原来如此
 实际上就是这么简单,咱们也就再也不纠结这个问题,继续下面的工做。

   实例 express 以及 建立服务器

//实例 express
var app = express();
//用于处理全部进入 3000 端口 get 的链接请求
app.get('/',function(req,res){
    //对请求链接返回内容
    res.send("Hello Node.js");
});
//监听3000端口
app.listen(3000);

  上面的代码经过注释,咱们就能明白其意思,这里我就再也不作细致的讲解。再次进入 dos 界面,经过命令进入咱们项目的文件的根目录下,如图:
进入项目根目录下
输入命令,启动咱们的Node.js项目

node app.js

启动成功后,咱们打开浏览器输入地址:http://localhost:3000 访问咱们的node.js项目,如图
启动node.js项目

范文结果

小技巧 :
  在每次更改完 node.js 项目后,咱们都须要先将 node.js中止(快捷键: Ctrl+C),而后再经过命令再次运行,这样特别麻烦。这里我推荐使用 supervisor 工具,npm 安装命令为:npm install -g supervisor。这样咱们启动 node.js 项目命令改成 supervisor app.js,更改项目后只须要保存,刷新浏览器页面就能够获得更改后的结果了。

  完成上面的工做后,咱们就能够正式开始写接入微信公众平台的主要代码,废话很少说直接贴代码
后退!我要开始装逼了

const express = require('express'), //express 框架 
       crypto =  require('crypto'), //引入加密模块
       config = require('./config');//引入配置文件

var app = express();//实例express框架

//用于处理全部进入 3000 端口 get 的链接请求
app.get('/',function(req,res){
    //1.获取微信服务器Get请求的参数 signature、timestamp、nonce、echostr
    var signature = req.query.signature,//微信加密签名
        timestamp = req.query.timestamp,//时间戳
            nonce = req.query.nonce,//随机数
          echostr = req.query.echostr;//随机字符串

    //2.将token、timestamp、nonce三个参数进行字典序排序
    var array = [config.token,timestamp,nonce];
    array.sort();

    //3.将三个参数字符串拼接成一个字符串进行sha1加密
    var tempStr = array.join('');
    const hashCode = crypto.createHash('sha1'); //建立加密类型 
    var resultCode = hashCode.update(tempStr,'utf8').digest('hex'); //对传入的字符串进行加密

    //4.开发者得到加密后的字符串可与signature对比,标识该请求来源于微信
    if(resultCode === signature){
        res.send(echostr);
    }else{
        res.send('mismatch');
    }
});

//监听3000端口
app.listen(3000);

4.部署项目

   完成了代码后咱们就能够把项目发布到外网上了,这里我用的是花生壳内网映射外网的软件,各位能够随意使用其余工具。
1.打开花生壳的软件,点击内网穿透:
花生壳
2.点击添加映射
点击添加映射
3.配置映射
这里写图片描述
  因为微信只接受80端口,咱们在映射类型选择为 网站80端口;内网主机就是咱们电脑的 IP 地址;内网端口号就是node.js的监听端口;点击肯定后,就成功映射到外网了,能够经过花生壳提供的域名进行访问。

5.接入验证

  再次进入 微信公众平台
在左侧菜单点击基本配置,如图:
基本配置

修改服务器配置

点击修改配置。其中服务器地址,就是咱们外网映射的地址;令牌(Token)就是咱们在 config.json 文件中 定义的 token 值;消息加密能够点击随机生成按钮,固然你也能够随便定义;消息加解密方式这块能够随便选择,这里我就使用默认的,如图:
微信服务器配置

微信公众平台接入

  点击提交按钮,提示 提交成功,那么我就要祝贺你了哎呦不错哦
  你已经成功的步入了Node.js开发微信的开发的第一步。

   文章源代码:https://github.com/SilenceHVK... 。对文章有不正确之处,请给予纠正。github源代码请顺手给个 Star,最后感谢您的阅读。

相关文章
相关标签/搜索