目录
一、搭建服务器
1.1 云服务器租用
本文中使用的云服务器为腾讯云提供的学生云服务器,通过账号注册、实名认证以及学生信息认证即可进行购买。本文中所使用的服务器配置为:1核2G,1M带宽,系统盘为高性能云硬盘,使用的操作系统为CentOS 8.4 64位。购买完成后,进入腾讯云的控制台管理页面,即可进行服务器的管理,如图1所示。
1.2 添加安全组规则
为了实现外网对服务器的访问,便需要在服务器实例的安全组列表中添加相应的安全组规则,以开放对应端口,配置规则如图2所示。
二、微信公众平台注册及配置
2.1 注册微信公众平台账号
进入微信公众平台官网并根据指引进行微信公众号的注册。具体的注册流程如下:
- 填写用户基本信息;
- 选择帐号类型,在本文中选择为订阅号;
- 选择主体类型为个人并进行个人信息的填写;
- 填写开发的微信公众平台账号信息,包括帐号名称、功能介绍等。
完成以上步骤后,可得到微信公众平台帐号如图3所示。
2.2 服务器配置
以下配置根据微信官方文档进行。
现在Linux服务器一般自带python2,这里自带的是python3。
查看python版本。
python --version
安装/更新需要用到的软件。
pip3 install web.py
pip3 install lxml
yum -y install libxml2
yum -y install libxslt
需要注意的是,官方文档提供的是python2的代码,和python3稍有区别。代码按照python3修改后如下:
vim main.py
# -*- coding: utf-8 -*-
# filename: main.py
import web
from handle import Handle
urls = (
'/wx', 'Handle',
)
if __name__ == '__main__':
app = web.application(urls, globals())
app.run()
vim handle.py
# -*- coding: utf-8 -*-
# filename: handle.py
import hashlib
import web
class Handle(object):
def GET(self):
try:
data = web.input()
if len(data) == 0:
return "hello, this is handle view"
signature = data.signature
timestamp = data.timestamp
nonce = data.nonce
echostr = data.echostr
token = "hello2022" # 此处需要替换
list = [token, timestamp, nonce]
list.sort()
sha1 = hashlib.sha1()
sha1.update(list[0].encode('utf-8'))
sha1.update(list[1].encode('utf-8'))
sha1.update(list[2].encode('utf-8'))
hashcode = sha1.hexdigest()
print("handle/GET func: hashcode, signature: ", hashcode, signature)
if hashcode == signature:
return echostr
else:
return ""
except(Exception, Argument):
return Argument
其中,URL为关联服务器的地址,当微信用户向该公众号发送消息时,微信平台会将包含该消息内容的XML数据包发送到该服务器。
2.3 vim的使用
通过熟练使用vim,可以加快代码的编写。
vim有三种模式:命令模式、插入模式和底行模式。
输入vim xxx.py,即进入命令模式。
2.3.1 模式转换
在命令模式下,输入i,进入插入模式,即可在光标后输入文本。
在插入模式下,按Esc键,返回命令模式。
在命令模式下,输入:,进入底行模式,继续输入wq则保存后退出。
在底行模式下,同样是按Esc键,返回命令模式。
2.3.2 更多操作
Linux操作系统中,ctrl+insert是复制,shift+insert是粘贴。
在命令模式下,输入gg跳转到首行,shift+g跳转到末行,shift+6跳转到光标所在行的末尾。
在底行模式下,若继续输入w则保存修改不退出,若继续输入q则不保存直接退出。如果最后加!,表示强制执行,比如在只读时:wq!,则会强制保存修改并退出。
三、基本功能部署
3.1 鹦鹉学舌
实现鹦鹉学舌,即把发来的话作为回复发回去。
main.py文件不改变,handle.py 需要增加代码。增加新的文件receive.py, reply.py,与官方文档相同,不再粘贴代码。
vim handle.py
# -*- coding: utf-8 -*-#
# filename: handle.py
import hashlib
import reply
import receive
import web
class Handle(object):
def POST(self):
try:
webData = web.data()
print "Handle Post webdata is ", webData
#后台打日志
recMsg = receive.parse_xml(webData)
if isinstance(recMsg, receive.Msg) and recMsg.MsgType == 'text':
toUser = recMsg.FromUserName
fromUser = recMsg.ToUserName
content = recMsg.Content.decode('utf-8') # 文本消息
replyMsg = reply.TextMsg(toUser, fromUser, content)
return replyMsg.send()
else:
print "暂且不处理"
return "success"
except Exception, Argment:
return Argment
效果如图5所示。
3.2 高级功能接入
未来可以添加自然语言处理的模型,实现聊天机器人等高级功能。
面向情绪交互的聊天机器人系统的设计与实现 by 陈龙
微信官方文档
token验证失败百分百解决