Python快速搭建自动回复微信公众号

在之前的一篇文章 Python利用 AIML 和 Tornado 搭建聊天机器人微信订阅号 中用 aiml 实现了一个简单的英文聊天机器人订阅号。但是只能处理英文消息,现在用 图灵机器人 来实现一个中文的聊天机器人订阅号。

这里主要介绍如何利用 PythonTornado Web框架以及wechat-python-sdk 微信公众平台 Python 开发包来快速搭建微信公众号。

完整的公众号代码 GitHub 地址:green ,由于目前此公众号有一些功能正在开发中,此完整代码会与下文所描述的代码有不一致的地方,但是自动回复的功能会一直保留。

本文搭建的微信公众号为 Ms_haoqi,可以扫码关注后测试效果

二维码

自动回复效果:
自动回复

安装Python库

通过 pip 安装 wechat-python-sdkRequests 以及 Tornado

123 pip install tornadopip install wechatsdkpip install requests

订阅号申请

要搭建订阅号,首先需要在微信公众平台官网进行注册,注册网址: 微信公众平台。

目前个人用户可以免费申请微信订阅号,虽然很多权限申请不到,但是基本的消息回复是没有问题的。

服务器接入

具体的接入步骤可以参考官网上的接入指南。

本订阅号的配置为:
服务器配置

配置里的URL为服务器提供订阅号后台的url路径,本文用到的源代码配置的是 http://server_ip/wx 其中 server_ip 是运行源代码的主机的公网ip地址。

Token 可以设置为任意字符串。

EncodingAESKey 可以选择随机生成。

消息加密方式可以设置为比较简单的明文模式。

接受并处理微信服务器发送的接入请求的关键代码为Tornado的一个Handle, wx.py :

1234567891011121314151617181920212223242526 import tornado.escapeimport tornado.web from wechat_sdk import WechatConfconf = WechatConf(    token=\’your_token\’, # 你的公众号Token    appid=\’your_appid\’, # 你的公众号的AppID    appsecret=\’your_appsecret\’, # 你的公众号的AppSecret    encrypt_mode=\’safe\’,  # 可选项:normal/compatible/safe,分别对应于 明文/兼容/安全 模式    encoding_aes_key=\’your_encoding_aes_key\’  # 如果传入此值则必须保证同时传入 token, appid) from wechat_sdk import WechatBasicwechat = WechatBasic(conf=conf) class WX(tornado.web.RequestHandler):    def get(self):        signature = self.get_argument(\’signature\’, \’default\’)        timestamp = self.get_argument(\’timestamp\’, \’default\’)        nonce = self.get_argument(\’nonce\’, \’default\’)        echostr = self.get_argument(\’echostr\’, \’default\’)        if signature != \’default\’ and timestamp != \’default\’ and nonce != \’default\’ and echostr != \’default\’                 and wechat.check_signature(signature, timestamp, nonce):            self.write(echostr)        else:            self.write(\’Not Open\’)

此代码的作用就是验证消息是来自微信官方服务器后直接返回echostr。

启动后台的 main.py 代码:

12345678910111213141516171819202122232425262728 import tornado.webimport tornado.httpserverfrom tornado.options import define, options settings = {            \’static_path\’: os.path.join(os.path.dirname(__file__), \’static\’),            \’template_path\’: os.path.join(os.path.dirname(__file__), \’view\’),            \’cookie_secret\’: \’e440769943b4e8442f09de341f3fea28462d2341f483a0ed9a3d5d3859f==78d\’,            \’login_url\’: \’/\’,            \’session_secret\’: \”3cdcb1f07693b6e75ab50b466a40b9977db123440c28307f428b25e2231f1bcc\”,            \’session_timeout\’: 3600,             \’port\’: 5601,            \’wx_token\’: \’weixin\’,            } web_handlers = [        (r\’/wx\’, wx.WX),        ] define(\”port\”, default=settings[\’port\’], help=an>\”port\”, default=settings[\’port\’], help=span style=\”font-size: 15px;font-family: \’Microsoft YaHei\’, 宋体, Lato, \’Helvetica Neue\’, Helvetica, Arial, sans-serif;line-height: 1.5\”> 中用 aiml 实现了一个简单的英文聊天机器人订阅号。但是只能处理英文消息,现在用 图灵机器人 来实现一个中文的聊天机器人订阅号。

这里主要介绍如何利用 PythonTornado Web框架以及wechat-python-sdk 微信公众平台 Python 开发包来快速搭建微信公众号。

完整的公众号代码 GitHub 地址:green ,由于目前此公众号有一些功能正在开发中,此完整代码会与下文所描述的代码有不一致的地方,但是自动回复的功能会一直保留。

本文搭建的微信公众号为 Ms_haoqi,可以扫码关注后测试效果

二维码

自动回复效果:
自动回复

安装Python库

通过 pip 安装 wechat-python-sdkRequests 以及 Tornado

123 pip install tornadopip install wechatsdkpip install requests

订阅号申请

要搭建订阅号,首先需要在微信公众平台官网进行注册,注册网址: 微信公众平台。

目前个人用户可以免费申请微信订阅号,虽然很多权限申请不到,但是基本的消息回复是没有问题的。

服务器接入

具体的接入步骤可以参考官网上的接入指南。

本订阅号的配置为:
服务器配置

配置里的URL为服务器提供订阅号后台的url路径,本文用到的源代码配置的是 http://server_ip/wx 其中 server_ip 是运行源代码的主机的公网ip地址。

Token 可以设置为任意字符串。

EncodingAESKey 可以选择随机生成。

消息加密方式可以设置为比较简单的明文模式。

接受并处理微信服务器发送的接入请求的关键代码为Tornado的一个Handle, wx.py :

1234567891011121314151617181920212223242526 import tornado.escapeimport tornado.web from wechat_sdk import WechatConfconf = WechatConf(    token=\’your_token\’, # 你的公众号Token    appid=\’your_appid\’, # 你的公众号的AppID    appsecret=\’your_appsecret\’, # 你的公众号的AppSecret    encrypt_mode=\’safe\’,  # 可选项:normal/compatible/safe,分别对应于 明文/兼容/安全 模式    encoding_aes_key=\’your_encoding_aes_key\’  # 如果传入此值则必须保证同时传入 token, appid) from wechat_sdk import WechatBasicwechat = WechatBasic(conf=conf) class WX(tornado.web.RequestHandler):    def get(self):        signature = self.get_argument(\’signature\’, \’default\’)        timestamp = self.get_argument(\’timestamp\’, \’default\’)        nonce = self.get_argument(\’nonce\’, \’default\’)        echostr = self.get_argument(\’echostr\’, \’default\’)        if signature != \’default\’ and timestamp != \’default\’ and nonce != \’default\’ and echostr != \’default\’                 and wechat.check_signature(signature, timestamp, nonce):            self.write(echostr)        else:            self.write(\’Not Open\’)

此代码的作用就是验证消息是来自微信官方服务器后直接返回echostr。

启动后台的 main.py 代码:

12345678910111213141516171819202122232425262728 import tornado.webimport tornado.httpserverfrom tornado.options import define, options settings = {            \’static_path\’: os.path.join(os.path.dirname(__file__), \’static\’),            \’template_path\’: os.path.join(os.path.dirname(__file__), \’view\’),            \’cookie_secret\’: \’e440769943b4e8442f09de341f3fea28462d2341f483a0ed9a3d5d3859f==78d\’,            \’login_url\’: \’/\’,            \’session_secret\’: \”3cdcb1f07693b6e75ab50b466a40b9977db123440c28307f428b25e2231f1bcc\”,            \’session_timeout\’: 3600,             \’port\’: 5601,            \’wx_token\’: \’weixin\’,            } web_handlers = [        (r\’/wx\’, wx.WX),        ]