微信,emmm……

0x00.前言

0x01.引用

1.0 准备域名

微信公众平台需要配置服务器地址URL访问,在实验开始之前,我们要准备域名。

1.1 域名注册

如果您还没有域名,可以在腾讯云上选购,过程可以参考下面的视频。

1.2 域名解析

域名购买完成后, 需要将域名解析到实验云主机上,实验云主机的IP为:
119.29.143.246
在腾讯云购买的域名,可以到控制台添加解析记录
域名设置解析后需要过一段时间才会生效,通过ping命令检查域名是否生效(注意替换下面命令中的www.yourmpdomain.com为您自己的注册的域名),如:
ping www.yourmpdomain.com
如果ping命令返回的信息中含有你设置的解析的IP地址,说明解析成功。

2.0 申请微信个人订阅号

在开始搭建我们的订阅号服务器之前,需要先拿到订阅号相关信息。

2.1 注册开发者账号

如果你还不是微信订阅号开发者,请先在微信公众平台注册:
https://mp.weixin.qq.com
若您已注册,请点击下一步。

2.2 获取微信订阅号公众平台认证字段信息

我们需要获取3个字段:AppID Token EncodingAESKey
登录微信公众平台,依次进入开发 - 基本配置可以拿到AppID
基本配置 - 服务器配置 - 修改配置表单中:
URL填第一步申请的域名;
Token用户根据提示填写,用于后面校验服务端合法性;
EncodingAESKey点击随机生成按钮来生成。
当点击表单提交按钮时,微信会通过Token来校验URL的合法性,这个我们在后面步骤实现,此界面暂时保留不关闭。

3.0 搭建HTTP服务

下面的步骤,将带大家在服务器上使用 Node 和 Express 搭建一个 HTTP 服务器

3.1 安装NodeJSNPM

使用下面的命令安装NodeJSNPM
yum install nodejs npm -y
安装完成后,使用下面的命令测试安装结果
node -v

emmm……又翻车了

3.2 编写HTTP Server源码

3.2.1 创建工作目录

使用下面的命令在服务器创建一个工作目录:
mkdir -p /data/release/weapp
进入此工作目录
cd /data/release/weapp

3.2.2 创建package.json

在刚才创建的工作目录创建package.json,添加我们服务器包的名称和版本号,可参考下面的示例。

1
2
3
4
{
"name": "weapp",
"version": "1.0.0"
}

完成后,使用Ctrl+S保存文件

3.2.3 添加Server源码

在工作目录创建app.js,使用Express.js来监听5050端口(本实验会以5050端口的打开作为实验步骤完成的依据,为了后面的实验步骤顺利进行,请不要使用其它端口号)
,可参考下面的示例代码(注:请将app.js文件中的token/appid/encodingAESKey等配置项替换为您的订阅号对应的取值)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// 引用 express 来支持 HTTP Server 的实现
const express = require('express');

// 引用微信公共平台自动回复消息接口服务中间件
var wechat = require('wechat');

// 创建一个 express 实例
const app = express();

// 配置微信公众平台参数,在教程第二步中获取
var config = {
token: 'your token', // 填第二步中获取的 `token`
appid: 'your appid', // 填第二步中获取的 `appid`
encodingAESKey: 'your encodingAESKey', // 填第二步中获取的 `encodingAESKey`
checkSignature: true // 可选,默认为true。由于微信公众平台接口调试工具在明文模式下不发送签名,所以如要使用该测试工具,请将其设置为false
};

app.use(express.query());

app.use('/', wechat(config, function (req, res, next) {
res.reply({
content: '你好,Hello World!',
type: 'text'
});
}));

// 监听端口,等待连接
const port = 5050;
app.listen(port);

// 输出服务器启动日志
console.log(`Server listening at http://127.0.0.1:${port}`);

3.3 运行HTTP服务

3.3.1 安装PM2

在开始之前,我们先来安装PM2(我们使用PM2来进行Node进程的运行、监控和管理)
npm install pm2 --global
PM2安装时间可能稍长,请耐心等候(NPM仓库在国内访问速度可能不太理想,如果实在太慢可以尝试使用CNPMRegistry进行安装:npm install pm2 -g --registry=https://r.cnpmjs.org/

3.3.2 安装Express

我们的服务器源码里使用到了Express模块,下面的命令使用NPM来安装Express
cd /data/release/weapp
npm install express --save

3.3.3 安装Wechat

我们的服务器源码里使用到了Wechat模块,下面的命令使用NPM来安装Wechat
cd /data/release/weapp
npm install wechat --save

3.3.4 启动服务

安装完成后,使用PM2来启动HTTP服务
cd /data/release/weapp
pm2 start app.js
现在,您的HTTP服务已经在http://119.29.143.246:5050运行
要查看服务输出的日志,可以使用下面的命令:
pm2 logs
如果要重启服务,可以使用下面的命令:
pm2 restart app

4.0 搭建nginx对外服务

NodeJs只是侦听的机器上的5050端口,我们使用nginx侦听80端口提供对外域名服务
安装Nginx
CentOS上,可直接使用yum来安装Nginx
yum install nginx -y
安装完成后,使用nginx命令启动Nginx
nginx
此时,访问http://119.29.143.246可以看到Nginx的测试页面(如果无法访问,请重试用nginx -s reload命令重启Nginx

4.1 配置HTTP反向代理

外网用户访问服务器的Web服务由Nginx提供,Nginx需要配置反向代理才能使得Web服务转发到本地的Node服务。
Nginx配置目录在/etc/nginx/conf.d,我们在该目录创建wechat.conf

1
2
3
4
5
6
7
8
server {
listen 80;
server_name www.example.com; # 改为第一步申请的域名

location / {
proxy_pass http://127.0.0.1:5050;
}
}

Ctrl+S保存配置文件,让Nginx重新加载配置使其生效:
nginx -s reload
在浏览器通过http的方式访问你解析的域名来测试HTTP是否成功启动

5.0 使用Server端回复微信消息

提交服务端配置
我们将第二步微信公众平台中保留的表单提交,同时将基本配置 - 服务器配置启用

5.1 关注、发送与消息回复

首先通过二维码关注微信订阅号
在聊天界面向微信公众号发送一条消息
最终我们会回到一条你好,Hello World!的回复