基于华为云设置微信公众号后台消息自动回复
目录
1.注册微信公众号
步骤 1 打开浏览器,输入微信公众平台网站 微信公众平台 在上方点击 “立即注册”。
步骤 2 在弹出的注册界面中,选择“订阅号”。
步骤 3 选择“订阅号”后,按照公众号指引流程进行注册,填写“基本信息”。
步骤 4 填好“基本信息”之后,点击注册。来到“选择类型”界面,注册地默认,点击确定。在弹出的界面中,选择“订阅号”,点击“选择并继续”。
步骤 5 选择好之后,到“信息登记页面”,进行对应信息的登记和选择(“主体信息”选择个人)
步骤 6 信息登记完成之后,按照指引进行下一步操作。以上四步完成之后,大家就会看到自己的公众号相关信息。
2.华为云进入控制台、
步骤 1 打开浏览器,输入华为云网站地址 https://www.huaweicloud.com/,在上方菜单栏中点击“登录”。
步骤 2 进入华为云控制台,更改当前区域为“华北-北京四”。
3.创建虚拟私有云 VPC
步骤 1 登陆华为云控制台,点击图标找到“虚拟私有云”,进入网络控制台,点击“创建虚拟私有云”进入创建界面
- 基本信息:
- l 当前区域:华北-北京四
- l 名称:vx075
- l 网段:192.168.0.0/16
默认子网:
- l 可用区:可用区 1
- l 名称:vxsubnet-075
- l 子网 IPv4 网段:192.168.0.0/24
- l 高级配置:默认配置(其余选项均保持默认即可)
步骤 2 点击“立即创建”,即可看到如下界面。
步骤 3 在网络控制台左侧菜单栏中点击“访问控制>安全组”进入安全组页面,点击需要修改的安全组“Sys-default”(当然也可以新建一个安全组,添加以下对应规则,并在创建云服务器时使用该安全组)。在“入方向规则”中点击“添加规则”。
4.创建弹性云服务器 ECS
步骤 1 登陆华为云控制台,点击下的“计算>弹性云服务器 ECS”,进入云服务器控制台,点击购买弹性云服务器。
步骤 2 设置云服务器参数
填写待创建弹性云服务器的“基本信息”。
- l 计费方式:按需付费
- l 区域:华北-北京四
- l 可用区:可用区 1
- l 规格:通用计算型,2 个 vCPU,4GB 内存
- l 镜像:公共镜像,CentOS7.4
- l 磁盘:系统盘,高 IO
填写“网络”相关信息。
- l 虚拟私有云:选择已创建好的 VPC,如 vx075
- l 安全组:选择已添加过安全组规则的安全组,如default
- l 弹性 IP:现在购买
- l 规格:全动态 BGP
- l 计费模式:按带宽计费
- l 宽带:5M
填写“高级配置”相关信息。
- l 云服务器名称:如 ecs-075
- l 登录凭证:公有云提供两种弹性云服务器鉴权方式。此处我们选择密码登录方式。密
- 码:自定,如 Huawei@2024
- l 云备份:暂不购买
- l 云监控:可选,默认即可
- l 云服务器组:可选,默认即可
- l 高级配置:不勾选
步骤 3 点击“下一步 确认配置”,确认无误后,勾选“我已经阅读并同意《镜像免责申明》”,点击“立即购买”
步骤 4 返回云服务器控制台,等待片刻后,可查看到已创建好的弹性云服务器
5.登陆弹性云服务器
使用 xshell7 软件,登录弹性云服务器
6.升级默认 Python 版本
步骤 1 查看 CentOS7.4 自带的 Python 版本,建议使用如下命令:
python –version
步骤 2 下载 Python 安装包,这里以 Python 3.6.0 版本为例,建议使用如下命令(若出现乱码,可以将 Putty 设置改为 UTF-8,该操作不影响最后结果):
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0a1.tar.xz
步骤 3 解压安装包,建议使用如下命令:
tar xvf Python-3.6.0a1.tar.xz
步骤 4 执行命令:
cd Python-3.6.0a1
步骤 5 执行命令:
./configure
步骤 6 执行命令:
make && make install
以上界面为执行成功的界面。但提示 pip 错误,原因是我的系统中少了 openssldevel 包,可以先忽略。
步骤 7 查看 Python3 版本,使用命令:
python3 --version
可以查看到此时的版本为 Python 3.6.0a1
7.升级默认 pip 版本
前面安装python3 提示“Ignoring ensurepip failure: pip 8.1.1 requires SSL/TLS”错误,导致 pip未成功安装,所以需要重新安装 pip
步骤 1 安装 openssl-devel 包,建议使用命令
yum install openssl-devel –y
步骤 2 执行命令:
make && make install
并升级 pip3,使用命令:
pip3 install --upgrade pip
出现如下提示说明安装 pip 安装成功
8.安装 Web.py 框架
Web.py 官方教程地址:http://webpy.org/,建议使用如下命令安装 web.py:
pip3 install web.py==0.40.dev0
出现如下提示说明安装成功。
9.安装 WinSCP
打开浏览器,输入 WinSCP 安装链接:https://winscp.net/eng/docs/lang:chs,点 击“下载”。
10.本地编写代码文件
10.1 新建 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()
将该记事本文件另存为,格式如下:
- l 文件名:main.py
- l 保存类型:所有文件
- l 编码:UTF-8
10.2 新建 handle.py 文件
步骤 1 在本地新建一个记事本文件,输入代码如下:
# -*- coding: utf-8 -*-
# filename: handle.py
import hashlib
import web
import receive
import time
import os
class Handle(object):
def __init__(self):
self.app_root = os.path.dirname(__file__)
self.templates_root = os.path.join(self.app_root, 'templates')
self.render = web.template.render(self.templates_root)
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 = "weixin"
list = [token, timestamp, nonce]
list.sort()
s = list[0] + list[1] + list[2]
hashcode = hashlib.sha1(s.encode('utf-8')).hexdigest()
print("handle/GET func: hashcode, signature: ", hashcode, signature)
if hashcode == signature:
return echostr
else:
return echostr
except (Exception) as Argument:
return Argument
def POST(self):
try:
webData = web.data()
print("Handle Post webdata is:\n", webData)
# 打印消息体日志
recMsg = receive.parse_xml(webData)
if isinstance(recMsg, receive.Msg) and recMsg.MsgType == 'text':
toUser = recMsg.FromUserName
fromUser = recMsg.ToUserName
content = "欢迎关注!" + str(recMsg.Content)
print('Reply message info:\n')
print('toUser =', toUser)
print('fromUser = ', fromUser)
print('content = ', content)
return self.render.reply_text(toUser, fromUser, int(time.time()), content)
else:
print("不支持的消息类型:", recMsg.MsgType)
return "success"
except (Exception) as Argment:
return Argment
将该记事本文件另存为,格式如下:
- l 文件名:handle.py
- l 保存类型:所有文件
- l 编码:UTF-8
10.3 新建 receive.py 文件
在本地新建一个记事本文件,输入代码如下:
# -*- coding: utf-8 -*-
# filename: receive.py
import xml.etree.ElementTree as ET
def parse_xml(web_data):
if len(web_data) == 0:
return None
xmlData = ET.fromstring(web_data)
msg_type = xmlData.find('MsgType').text
if msg_type == 'text':
return TextMsg(xmlData)
elif msg_type == 'image':
return ImageMsg(xmlData)
elif msg_type == 'location':
return LocationMsg(xmlData)
elif msg_type == 'event':
return EventMsg(xmlData)
class Event(object):
def __init__(self, xmlData):
self.ToUserName = xmlData.find('ToUserName').text
self.FromUserName = xmlData.find('FromUserName').text
self.CreateTime = xmlData.find('CreateTime').text
self.MsgType = xmlData.find('MsgType').text
self.Eventkey = xmlData.find('EventKey').text
class Msg(object):
def __init__(self, xmlData):
self.ToUserName = xmlData.find('ToUserName').text
self.FromUserName = xmlData.find('FromUserName').text
self.CreateTime = xmlData.find('CreateTime').text
self.MsgType = xmlData.find('MsgType').text
self.MsgId = xmlData.find('MsgId').text
class TextMsg(Msg):
def __init__(self, xmlData):
Msg.__init__(self, xmlData)
self.Content = xmlData.find('Content').text
class ImageMsg(Msg):
def __init__(self, xmlData):
Msg.__init__(self, xmlData)
self.PicUrl = xmlData.find('PicUrl').text
self.MediaId = xmlData.find('MediaId').text
class LocationMsg(Msg):
def __init__(self, xmlData):
Msg.__init__(self, xmlData)
self.Location_X = xmlData.find('Location_X').text
self.Location_Y = xmlData.find('Location_Y').text
class EventMsg(Msg):
def __init__(self, xmlData):
Event.__init__(self, xmlData)
self.Event = xmlData.find('Event').text
将该记事本文件另存为,格式如下:
- l 文件名:receive.py
- l 保存类型:所有文件
- l 编码:UTF-8
10.4 新建 templates 文件夹
新建 templates 文件夹,在文件夹下新建记事本文件,输入代码如下:
$def with (toUser,fromUser,createTime,content)
<xml>
<ToUserName><![CDATA[$toUser]]></ToUserName>
<FromUserName><![CDATA[$fromUser]]></FromUserName>
<CreateTime>$createTime</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[$content]]></Content>
</xml>
11.WinSCP 上传代码文件
步骤 1 打开 WinSCP,在界面中输入弹性云主机的主机名、用户名以及密码,确认输入无误后,点击登录。
步骤 2 在本地创建一个名称为 wx 的文件夹,将上述代码文件拖入到该文件夹中。
步骤 3 用 WinSCP 工具将 wx 文件夹上传到云服务器的根目录中。
12.启动对应服务
使用如下命令启动服务:python3 main.py 80。启动成功如图所示
13.启用开发者模式
步骤 1 登录微信公众平台,选择“开发 > 基本配置”,单击“修改配置”。
步骤 2 填写配置信息,单击“提交”。
- URL:填写 ECS 上配置的弹性公网 IP,此处应该写:http://121.36.36.178/wx。
- Token:需要与 handle.py 中对应 token 取值完全一致,此处为 weixin。
- EncodingAESKey:随机生成。
- 消息加解密方式:此为示例,选择简单的“明文模式”。
步骤 3 验证 token 成功,单击“启用”。
14.微信公众号验证实验结果
使用微信关注公众号,任意发送一条文本消息,看是否能够收到回复。如能收到回复则表明系统处理正常。
15.删除弹性云服务器 ECS
步骤 1 登陆华为云控制台,进入弹性云服务器界面,点击“更多”按钮,在展开的选项中点击“删除”( 在删除时,需要勾选删除弹性公网 IP 和数据盘,以免删除不完整带来不必要的费用)。
16.删除虚拟私有云
登陆华为云控制台,找到自己创建的虚拟私有云 VPC,点击该 VPC,删除该 VPC 的子网
至此,资源已全部删除完毕。