【Node.js+Express微信公众号开发】第一步:服务搭建及微信接入

linvic

一、前言

此前微信开发,都比较依赖后端。然而有时候后端小伙伴特别忙,最近又学习了一下node的基础知识,索性就想着自己用node整一遍。

本教程环境为linux系统centOs7系统

二、准备工作

1. 服务器

服务器我使用的是搬瓦工的,目前19.9美元那款,网上有优惠券,对比下来也不贵,国外的也免备案,有兴趣可以去购买。
系统为centOs7。

2. 公众号

mp.weixin.qq.com

三、搭建服务

使用Xshell链接服务器。

1. 安装node

$ sudo yum -y install nodejs

2. 安装express脚手架

$ npm install express-generator -g

3. 创建项目

3.1 脚手架快速搭建

//创建源码目录,此处我的路径为/home/nodeApp,您可以根据自己需要放置源码
$ cd /home
$ mkdir dir nodeApp
// 进入目录
$ cd nodeApp
//创建项目
$ express wxApp
$ cd wxApp
// 安装项目所需依赖包
$ npm install

此时脚手架创建项目成功,但是应用默认的为3000端口,而微信配置服务器地址时,只允许80和443端口,故这边将我们项目改为80端口:

3.2 修改项目服务端口

clipboard.png
修改的方法有两种,上面截图是在自己电脑本地修改后把文件放到服务器(如ftp),下面介绍服务器vi命令修改:

$ cd bin 
$ vi www
然后保存

3.3 安装nodemon(可跳过)

因习惯了vue热加载,node服务更改的话都要重启服务才能生效,这个nodemon插件就是相当于热加载,自动重启服务。

// 全局安装nodemon插件
$ npm install -g nodemon
// 进入项目下的bin目录
$ cd bin
// 创建并编写 nodemon.json 配置文件
$ vi nodemon.json

下面是nodemon.json 配置文件内容:

{
    "restartable": "rs",
    "ignore": [
        ".git",
        ".svn",
        "node_modules/**/node_modules"
    ],
    "verbose": true,
    "execMap": {
        "js": "node --harmony"
    },
    "watch": [],
    "env": {
        "NODE_ENV": "development"
    },
    "ext": "js json"
}

保存完成。(同样的,你也可以本地编辑好再放到服务器)

3.4 运行项目

// 回到项目根目录 /home/nodeApp/wxApp
$ cd ..
// 运行项目
$ nodemon npm start

clipboard.png

如果如图一样,就证明服务已经开启了。
(注:如果遇到端口80冲突,请先关闭你服务器其他80端口占用的服务,再进行启动项目。)

在浏览器输入你服务器的ip。如果看到下图所示,证明你的项目已经搭建成功!!!

clipboard.png

四、微信配置

登录微信公众平台,
找到基本配置---服务器配置:

clipboard.png

如上所示,配置填写,此时提交,微信肯定是会报错的,因为我们自定义的token没有在服务器进行设置。

设置服务器token

// 安装crypto
$ npm install crypto

将index.js的内容替换成下面内容
clipboard.png

var express = require('express');
var crypto = require('crypto');
var router = express.Router();
  
var token = "WeiChartToken"; //此处是我们自定义的token,需与准备填写到微信配置上的一致!
  
/* GET home page. */
router.get('/', function(req, res, next) {
  
    var signature = req.query.signature;
    var timestamp = req.query.timestamp;
    var nonce = req.query.nonce;
    var echostr = req.query.echostr;
  
    /*  加密/校验流程如下: */
    //1. 将token、timestamp、nonce三个参数进行字典序排序
    var array = new Array(token,timestamp,nonce);
    array.sort();
    var str = array.toString().replace(/,/g,"");
  
    //2. 将三个参数字符串拼接成一个字符串进行sha1加密
    var sha1Code = crypto.createHash("sha1");
    var code = sha1Code.update(str,'utf-8').digest("hex");
  
    //3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
    if(code===signature){
        res.send(echostr)
    }else{
        res.send("error");
    }
});
module.exports = router;

配置完成,然后到公众号再次按图示配置确认即可。

阅读 1.6k

前端技术汇
总结前端开发经验,自己遇到的一些坑以及如何填坑的过程

console.log('hello FED');

892 声望
38 粉丝
0 条评论
你知道吗?

console.log('hello FED');

892 声望
38 粉丝
宣传栏