Python+Tornado开发微信公众号(上)

本教程针对的是已掌握Python语言基本用法并且掌握其任一Web框架的用户。

本教程使用的Python版本为3.5.0, Web框架为Tornado, IDE开发工具为PyCharm,整个开发过程是在Windows环境下测试开发,最终上线部署至centos服务器。

备注:(1) 如果您是python小白,建议参考Python入门教程

(2) 对tornado框架还不熟悉的同学,建议参考Tornado中文文档

本教程整体框架如下:

思维导图如下:

整体项目结构如下:

下面我们正式进入详细的开发流程

一. Python开发环境和项目的初始化搭建

1. 安装python及pip,并配置环境变量,安装tornado框架

Python及pip安装参考教程windows下面安装Python和pip终极教程

(1) 下载Python包并安装 点此下载

(2) 将python配置到系统环境变量

(3) 下载pip包并安装 点此下载

(4) 将pip配置到系统环境变量

(5) 使用pip安装tornado框架 指令为:

2. 选择一款开发Python的IDE

本教程使用的是PyCharm点击下载

附带: PyCharm 2016.2.3专业版注册码

3. 选择一个代码托管平台

本教程使用的是开源中国Git@osc代码托管平台 码云 - 开源中国代码托管平台,请自行注册,并配置账户下的SSH密钥,关于Git的使用,请参考教程 Git教程 - 廖雪峰的官方网站

4. 创建Web项目

使用Tornado搭建项目入口,端口号为8000,项目搭建至完成微信校验所需的基本代码如下:

项目整体目录

为了方便调试,编写了日志管理文件logger_helper.py

备注: 为防止日志输出报错, 请各位同学注意修改日志输出目录为自己定义的文件目录

配置Tornado的url路由规则url.py

基本配置文件run.py

(5) 同步项目文件至Git托管平台

项目入口文件及微信校验文件已编写好,使用Git同步代码至托管平台,接下来需要配置端口映射,使外网能访问到我们的本地项目,便于完成微信服务端校验.

5. 使用花生壳,配置本地测试所需端口映射

微信公众号开发需要配置服务端URL, 验证URL的有效性,这个URL必须以http://或https://开头,分别支持80端口和443端口,我们目前测试阶段都是在自己电脑上测试(本地测试),为了满足不断修改代码能够即时生效, 因此需要一个外网ip端口映射到本地(内网穿透),我本人使用的是花生壳内网穿透服务,下面是花生壳的使用流程:

(1) 花生壳的账户注册 花生壳软件-内网也能用!内网动态域名,注册成功后,会赠送一个免费域名,这个域名同时也配备了一个公网ip

(2) 进入到花生壳管理界面, 选择内网穿透菜单,进入到配置界面

(3) 选择 右边的"编辑"操作,弹出编辑映射面板,在"内网主机"一项,填上自己本地电脑的ip地址,端口填写自己将要创建的web应用端口,我本地项目用的端口号为8000,此处填写8000即可

二. 微信公众号注册及开发模式校验配置

填写完毕后,先启动我们的项目,运行python run.py指令后, 保证我们的服务器是运行着的, 然后点击"提交",如果你是按照以上流程操作的话,会提示提交成功,否则校验失败,需要我们通过日志检查是哪一块出了问题.

(2) 接下来,校验成功后,点击启用,即可激活开发者模式

三.接收关注/取关事件推送和自动回复

1. 接收关注/取关事件推送

wxauthorize.py

以下是在该文件中增加的post方法,用来接收事件推送

2. 自动回复

(1) 同接收关注/取关事件推送消息一样,用户给我们公众号发送消息时,微信公众平台也会推送数据至我们的后台微信校验的接口,在接收到消息后,我们取出自定义的关键字进行匹配,匹配到了就执行自动回复

(2) 微信公众平台也提供了语音识别功能, 将用户发送的语音内容识别转化为文字,发送给我们后台,在使用该功能时需要在接口权限中打开语音识别功能.

wxauthorize.py

以下是在该文件中post方法中增加的一个判断,用来匹配用户文本消息和语音消息中的关键字

本文来自企鹅号 - 全球大搜罗媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

用Kibana和logstash快速搭建实时日志查询、收集与分析系统

日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日志详情 监控系统的运行状况 统计分析,比如接...

3595
来自专栏技术翻译

PostgreSQL复制和备份的3种方法

Citus分布式数据库通过拆分,复制和查询并行扩展了PostgreSQL的。对于复制,我们的数据库即服务(默认情况下)利用Postgres内置的流复制逻辑。

1.3K2
来自专栏.Net移动开发

.Net语言 APP开发平台——Smobiler学习日志:基于Access数据库的Demo

说明:该demo是基于Access数据库进行客户信息的新增、查看、编辑 新增客户信息和客户列表

1552
来自专栏IMWeb前端团队

从零开始学web安全(1)

本文作者:IMWeb 刘志龙 原文出处:IMWeb社区 未经同意,禁止转载 一直对web安全很感兴趣,却一直只是略懂一点。决定从现在开始学起web安全...

1968
来自专栏云计算

Kubernetes的服务网格(第4部分):通过流量切换持续部署

除了服务发现,重要指标和TLS之外,linkerd还具有强大的路由语言,称为dtabs,可以用来改变请求的方式 - 甚至是单个请求 - 流经应用程序拓扑。在本文...

4597
来自专栏Pythonista

web service基础知识

<!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px '.PingFang SC'; color: ...

3023
来自专栏飞雪无情的博客

便捷自动的访问Google 开发者资源网站

Google IO 2016年的大会在北京召开的时候,Google公布了一批Google中国的开发者资源网站,方便中国的开发者访问以及进行软件网站等开发,为了纪...

1113
来自专栏kl的专栏

DevOps自动化组件-RUNDECK介绍、开发、部署、使用

RunDeck 是用 Java开发的自动化部署持续集成的工具应用,项目已开源。runDeck的产品属性和jenkis类似。提供web界面和restapi来给用户...

1K9
来自专栏石瞳禅的互联网实验室

解决Gradle报错找不到org.gradle.api.internal.project.ProjectInternal.getPluginManager()方法问题

因为本地的Android Studio很久没用了,所以想要研究下github上的某个代码的时候,还得重新配下环境

811
来自专栏王清培的专栏

ElasticSearch大数据分布式弹性搜索引擎使用

阅读目录: 背景 安装 查找、下载rpm包 、执行rpm包安装 配置elasticsearch专属账户和组 设置elasticsearch文件所有者 切换到el...

79110

扫码关注云+社区

领取腾讯云代金券