文章目录
- 1、先准备好一台ECS服务器
- 2、安装宝塔面板
- 3、新建站点
- 4、配置Nginx
- 5、服务器安装Flask和Gevent
- 6、敲代码
- 7、跑起来
- 8、提交服务器配置
- 9、测试
- 10、POST参数解密
1、先准备好一台ECS服务器
2、安装宝塔面板
新手上路推荐装上宝塔面板,这样管理起来比较方便,里面的功能也齐全,可以省去很多敲复杂命令和解决报错的时间,宝塔面板官网为 bt.cn ,操作系统不同,安装的命令也会不同,可以参照官网给的教程进行安装,在这里我就不详细介绍了,有不懂的问题可以私信我哈
3、新建站点
在宝塔面板安装好Nginx,然后新建一个站点,绑定好域名,同时记得到阿里云后台解析好域名
4、配置Nginx
在 配置文件 这里,滑到最底下,在红框2的位置添加以下代码,注意缩进,保持与原文件格式一致
添加此配置的作用是让Nginx把根目录映射到内网的5000端口,当有人输入域名访问时直接链接到此端口
location / {proxy_pass http://[此处替换服务器的内网IP地址]:5000;}
ps:不想用根目录的话也可以用其他目录,如:http://域名/wx等,修改为以下代码即可
location /wx {proxy_pass http://[此处替换服务器的内网IP地址]:5000;}
5、服务器安装Flask和Gevent
安装命令
pip install flask
pip install gevent
6、敲代码
根据个人习惯哈,可以在服务器SSH上直接用VIM写,我的话习惯在本地用Pycharm写好然后上传到服务器来跑
- 参照Flask官方给的技术文档 (https://dormousehole.readthedocs.io/en/1.1.2/quickstart.html#id2) ,写个最小应用
- 同时也参照微信公众平台官方给的技术文档 (https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html) ,根据所给参数和工序编写逻辑代码
from flask import Flask, request, abort
from gevent import pywsgi
import hashlibflask_app = Flask(__name__)@flask_app.route('/', methods=["GET", "POST"])
def home():# 微信服务器发来的三个get参数signature = request.args.get("signature")timestamp = request.args.get("timestamp")nonce = request.args.get("nonce")# 公众号后台自己填写的tokentoken = "[此处替换Token]"# 加进同一个列表里list1 = [token, timestamp, nonce]# 排序list1.sort()# 把列表转换成字符串str1 = "".join(list1)# 生成sha1值sha1_str = hashlib.sha1(str1.encode("utf-8")).hexdigest()# 与signature参数比对# 若不一致if signature != sha1_str:# 被认定为非微信服务器发来的get请求# 返回403拒接请求abort(403)# 若一致else:# 判断# 若为get请求则认定为开发者第一次配置服务器if request.method == "GET":# 定义echostr参数echostr = request.args.get("echostr")# 判断get参数中是否含有echostr参数if echostr:# 若存在则按官方文档要求原样返回return echostr# 若不存在则返回400错误请求else:abort(400)if __name__ == '__main__':# 此配置解决WSGI报错问题server = pywsgi.WSGIServer(('0.0.0.0', 5000), flask_app)server.serve_forever()
7、跑起来
这边我把文件命名为launch.py,然后跑起来
命令
python launch.py
回车后下面不报错就没问题了
8、提交服务器配置
到微信公众平台,进入配置页面
填写URL、Token、EncodingAESKey和选择消息加密方式
- URL:填写服务器绑定的域名
- Token:随便写一个,稍微带点难度就可以
- EncodingAESKey:建议随机生成,也可以自己写,难度要尽量大
- 消息加密方式:根据不同的需求和场景选择,建议选择安全模式,我这边也选择安全模式
填写好点击提交
- 顶部提示提交成功,然后点击启用,那么恭喜你配置成功
- 顶部提示提交失败,在服务器上找找问题,比如:http或https是否写错、检查服务器入方向端口是否开放,服务器防火墙是否关闭、是否允许外网设备访问等等
9、测试
在微信给自己的公众号发几条消息看看服务器有没有收到
回到SSH窗口
- 若发出消息后立刻有微信服务器的POST请求过来,则为测试成功
- 若没有POST请求过来,请检查此.py文件是否跑起来等
10、POST参数解密
请看下期