推荐使用CentOS操作系统,本人在使用Ubuntu操作系统时安装第三方软件不是很顺利,导致在微信公众号服务器配置的Token验证失败不通过上浪费大量时间。
以下是CentOS 和Ubuntu的介绍:
抛开内核版本来说,Linux各发行版用的内核都是一样的,不同的只是安装的软件包。
CentOS是RedHat的社区版本,可以兼容RedHat的RPM安装包,一般用作服务器,预安装的也都是服务器的内容。除了没有RedHat服务外(反正要钱的咱也不会买),用起来与RedHat相差不大。包管理一般用rpm或者yum来管理。
Ubuntu是基于Debian发行版和GNOME桌面环境,也有KDE版本,属于较流行的发行版,它强化了图形方面的功能,有面向一般用户的桌面版本,也有服务器版本。因为其桌面版本比较漂亮,有较多多媒体方面的软件和ubuntu软件中心的支持,对一般用户也还算好用,所以较流行。其服务器版本也就没什么好说了,都差不太多。包管理一般用apt-get。
阿里云服务器+微信公众号配置操作如下:
1、购买阿里云服务器服务/,从“云服务器ECS”进入实例
远程登入服务器,输入root + 密码登入(实例,端口系统会默认选好)。
2、CentOS后台服务器的搭建
以下部分参考来源:/articles/708415
安装NodeJS
首先执行以下命令
sudo su
下载最新的稳定版 v6.10.3 到本地
wget /dist/v6.10.3/node-v6.10.3-linux-x64.tar.xz
下载完成后, 将其解压
tar xvJf node-v6.10.3-linux-x64.tar.xz
将解压的 Node.js 目录移动到 /usr/local 目录下
mv node-v6.10.3-linux-x64 /usr/local/node-v6
配置 node 软链接到 /bin 目录
ln -s /usr/local/node-v6/bin/node /bin/node
配置 NPM
NPM
是Node.js
的包管理和分发工具。它可以让 Node.js 开发者能够更加轻松的共享代码和共用代码片段
下载node
的压缩包中已经包含了 npm , 我们只需要将其软链接到 bin 目录下即可
ln -s /usr/local/node-v6/bin/npm /bin/npm
配置环境变量
将 /usr/local/node-v6/bin 目录添加到 $PATH 环境变量中可以方便地使用通过 npm 全局安装的第三方工具
echo 'export PATH=/usr/local/node-v6/bin:$PATH' >> /etc/profile
生效环境变量
source /etc/profile
安装 Express
安装 Express 应用脚手架:
npm install express-generator -g
创建新的项目
执行
cd /data/express yourApp
这时候会在/data
生成应用目录/yourApp
,继续执行以下命令
cd yourAppnpm installnpm start
配置服务器信息,进入开发者模式
微信平台会去验证你填写的服务器的有效性,所以配置服务器前要先编写服务器有效性验证的代码。
在终端使用Ctrl + C
终止刚才启动的服务,然后执行以下命令安装依赖的文件:
npm install xml2js sha1 querystring
编辑 app.js,参考下面的代码:
示例代码:/data/yourApp/app.js
var express = require('express');var app = express();var http = require('http');var sha1 = require('sha1');var xml2js = require('xml2js');var querystring = require('querystring');process.env.PORT = '80';function checkSignature(req) {// 获取校验参数var signature = req.query.signature;var timestamp = req.query.timestamp;var nonce = req.query.nonce;// 此处为实验分配了一个 token,也可以修改为自己的 tokenvar token = 'Password';// 按照字典排序var params = [token, timestamp, nonce];params.sort();// 连接var str = sha1(params.join(""));// 返回签名是否一致return str == signature;}// 接入验证app.get('/', function(req, res) {// 签名成功if (checkSignature(req)) {res.send(200, req.query.echostr);} else {res.send(200, 'fail');}});module.exports = app;
启动服务:
npm start
3、微信公众号配置
登录微信公众号平台,然后拉到页面的最下面左侧“开发”,点击基本配置菜单。获取AppID,AppSecret,填写IP白名单(把阿里云服务器的IP地址填写进去)
接着点击上图,服务器配置,修改配置:
填写以下信息:
服务器地址(URL):填写您的云服务器 IP 地址
令牌(Token):填写上面代码中使用到的 Token,如无修改,直接使用Password(阿里云服务器上的
Token要和微信公众号的
Token设置为一模一样)
消息加解密密钥(EncodingAESKey):随机字符串。可以让平台生成。消息加解密方式:选择明文方式
。
配置完毕后点击提交,提交成功后,在基本配置菜单页面点击启用。
此时,微信用户给公众号发送的信息,会由微信平台转发给您的服务器,然后您的服务器进行处理后返回给用户。
最后点击提交,检查是否可以提交成功。