前言
刚学python,拿微信公众号开发来练手,微信公众号是要验证token的
在百度云买了个云主机,系统选了contos7 发现默认预装的是python2,但本地开发时候用的windows环境,然后项目的依赖环境是python3,所以要在不影响python2使用的情况下,配置python3。
网上查资料也踩了不少坑,把配置的过程总结一下。
1.安装python3
新机器上来啥都没,只有yum,下载编译依赖包(没错,需要自己编译)
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
1).下载python3源码
cd /home/download #这里我找个放文件的目录
wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz #会下载到/home/download里
解压,编译
tar -xvJf Python-3.7.4.tar.xz
cd Python-3.7.4
./configure prefix=/usr/local/python3
make && make install
装完了,但这时候你执行python -V
,还是会提示你在python2下面
这时候需要设置一个软连接来关联python3,这里我们不改动原来的python,新建一个python3命令
至于为啥要这么做,因为contos其他的命令可能是依赖python2的,如果一个个都修改,会比较麻烦,比如yum
使用的就是py2
ln -s /usr/local/python3/bin/python3 /usr/bin/python
python3 -V #成功的话,执行这个命令应该能看到python3版本
2).软连接pip3
pip3 -V #试试pip3能用不,一般是不行的,除非你跑到/usr/local/python/bin下去执行
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 #给pip3增加软连接,方便直接调用
pip3 -V #成功后应该能看到一个版本映射了,以后都能在任意目录下直接用pip3命令了
2.微信公众号token验证
先追求能用即可,安全性,优雅,日志全部暂时不考虑,用flask构建一个微信的api
微信接入逻辑参考: 微信接入指南
# coding=UTF-8
from flask import Flask
from flask import request
import hashlib
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def home():
return 'hello'
@app.route('/wx', methods=['GET', 'POST'])
def wx():
if request.method == "GET":
my_signature = request.args.get('signature') # 获取携带的signature参数
my_timestamp = request.args.get('timestamp') # 获取携带的timestamp参数
my_nonce = request.args.get('nonce') # 获取携带的nonce参数
my_echostr = request.args.get('echostr') # 获取携带的echostr参数
token = '' # 这里放微信拿来的token
# 进行字典排序
data = [token,my_timestamp ,my_nonce ]
data.sort()
# 拼接成字符串,这里要encode一下,不然会报错
temp = ''.join(data).encode(encoding='UTF-8',errors='strict')
# 进行sha1加密
mysignature = hashlib.sha1(temp).hexdigest()
# 加密后的字符串可与signature对比,标识该请求来源于微信
if my_signature == mysignature:
return my_echostr
else:
return 'errToken'
if __name__ == '__main__':
app.run()
完事了上传到服务器上
3.python项目作为服务启动
1).创建服务
新建一个名为my_web_service.service
的文件,并用vim编辑器打开
vim /usr/lib/systemd/system/my_web_service.service
按insert
键,进入vim的编辑模式
复制以下内容,按shift+insert
黏贴后,按esc退出编辑模式,输入:wq
保存并退出
Description=WX Service
After=network.target
[Service]
Type=idle
ExecStart=/usr/local/python3/bin/python3 /your_upload_path/pyfile.py
[Install]
WantedBy=multi-user.target
ExecStart里为服务启动时执行的命令,必须写全路径
/usr/local/python3/bin/python3
是我们之前安装的python3
/your_upload_path/pyfile.py
是你要启动的项目
2).启动服务
这里不需要全路径了,直接打服务名字即可(之前创建的服务文件my_web_service
)
依次执行以下命令
#启用自定义服务
systemctl enable my_web_service.service
#启动服务
systemctl start my_web_service.service
#查看服务
systemctl status my_web_service.service -l
至此,项目应该已经在服务器上跑起来了