一、前言
此前微信开发,都比较依赖后端。然而有时候后端小伙伴特别忙,最近又学习了一下node的基础知识,索性就想着自己用node整一遍。
本教程环境为linux系统centOs7系统
二、准备工作
1. 服务器
服务器我使用的是搬瓦工的,目前19.9美元那款,网上有优惠券,对比下来也不贵,国外的也免备案,有兴趣可以去购买。
系统为centOs7。
2. 公众号
https://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 修改项目服务端口
修改的方法有两种,上面截图是在自己电脑本地修改后把文件放到服务器(如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
如果如图一样,就证明服务已经开启了。
(注:如果遇到端口80冲突,请先关闭你服务器其他80端口占用的服务,再进行启动项目。)
在浏览器输入你服务器的ip。如果看到下图所示,证明你的项目已经搭建成功!!!
四、微信配置
登录微信公众平台,
找到基本配置---服务器配置:
如上所示,配置填写,此时提交,微信肯定是会报错的,因为我们自定义的token没有在服务器进行设置。
设置服务器token
// 安装crypto
$ npm install crypto
将index.js的内容替换成下面内容
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;
配置完成,然后到公众号再次按图示配置确认即可。