使用python django快速搭建微信公众号后台
前言
使用python语言,django web框架,以及wechatpy,快速完成微信公众号后台服务的简易搭建,做记录于此。
wechatpy是一个python的微信公众平台sdk,封装了被动消息和主动推送的各种api,做公众平台开发时只需关注消息内容,无需处理xml解析等工作。
项目地址:https://github.com/jxtech/wechatpy
文档地址:http://docs.wechatpy.org/
开始搭建
环境配置
首先当然是安装django,安装wechatpy。
可参照 http://docs.wechatpy.org/zh_CN/master/install.html 完成wechatpy及其依赖的安装。
配置url和view
项目urls.py中配置相应url,指定到自己的名为mywechat应用中,如
urlpatterns = [
    url(r'^wx/', include('mywechat.urls')),
]
mywechat应用中配置url指定到某个view:
urlpatterns = [
    url(r'', views.handle_wx, name="wx"),
]
view处理微信请求
views.py中写一个handle_wx方法,用于处理微信请求:
from django.http import HttpResponse, HttpResponseRedirect
from django.views.decorators.csrf import csrf_exempt
from wechatpy import parse_message, create_reply
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
from wechatpy.replies import BaseReply
# 以下两个是自己定义的模块,位于wechat.util包下,分别处理文本和事件消息
from mywechat.util import reply_text, reply_event
TOKEN = 'xxxxx'  # 这里要指定一个token,后续填入到微信平台中
@csrf_exempt
def handle_wx(request):
    # GET方式用于微信公众平台绑定验证
    if request.method == 'GET':
        signature = request.GET.get('signature', '')
        timestamp = request.GET.get('timestamp', '')
        nonce = request.GET.get('nonce', '')
        echo_str = request.GET.get('echostr', '')
        try:
            check_signature(TOKEN, signature, timestamp, nonce)
        except InvalidSignatureException:
            echo_str = 'error'
        response = HttpResponse(echo_str, content_type="text/plain")
        return response
    # POST方式用于接受和返回请求
    else:
        reply = None
        msg = parse_message(request.body)
		# 判断消息类型,文本消息则调用reply_text进行处理
        if msg.type == 'text':
            reply = reply_text.do_reply(msg)
        elif msg.type == 'event':
            reply = reply_event.do_reply(msg)
        else:
            pass
        if not reply or not isinstance(reply, BaseReply):
            reply = create_reply('暂不支持您所发送的消息类型哟~ 回复“帮助”查看使用说明。', msg)
        response = HttpResponse(reply.render(), content_type="application/xml")
        return response
文本、图片、语音等很多消息类型均支持,详情参见:http://docs.wechatpy.org/zh_CN/master/messages.html#
处理文本请求
新建reply_text.py,用于处理文本类消息。
from wechatpy import parse_message, create_reply
from wechatpy.replies import TextReply, ArticlesReply
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
def do_reply(msg):
    reply = None
    try:
        if msg.content == '天气':
		    # msg.content即为消息内容
            reply = create_reply('相关回复文本', msg)
        else:
            reply = create_reply('没有此关键词', msg)
    except Exception as e:
        print 'error:', e
    return reply
处理事件请求
可以对用户的关注、取关等事件进行处理。如果消息类型为event,则会被view调用reply_event.py进行处理。
from wechatpy import create_reply
# 响应用户关注/取关事件
def do_reply(msg):
    reply = None
    try:
	    # 关注事件
        if msg.event == 'subscribe':
           reply = create_reply('你好呀', msg)
        elif msg.event == 'unsubscribe':
            # 用户取关
            pass
        else:
            reply = create_reply('暂不支持您发送的内容', msg)
    except Exception as e:
        print('error:', e)
        reply = create_reply('出错了', msg)
    return reply
支持更多类型的事件,详细可以查看wechatpy的文档:http://docs.wechatpy.org/zh_CN/master/events.html
调试环境下的外网映射
完成以上代码后,可以处理简单的关注和取关事件,并响应文字消息了。此时,需要先将调试环境映射到外网,可以用花生壳这个软件:http://hsk.oray.com/ , 可免费用来在测试程序时将本地服务映射到外网。
比如,绑定了 testwx.imwork.net 的域名(端口为80),映射到 127.0.0.1:8000.
配置公众号后台
公众号后台也需要进行配置,进入“开发——基本配置”,填写服务器配置。
url写为刚才申请到的域名,并注意后面与django中的url一样,即应当写为 http://testwx.imwork.net/wx/。
令牌(token)则是与上面view中的token相同。

可选择明文方式的消息,也可根据需要选择加密消息。
配置完成后,点击保存时,公众号后台会向指定的url发送一次GET请求,如果代码没问题的话,则程序会返回预定的值,无误后即完成绑定。
然后在公众号中回复文字,就能收到相应的消息了,公众号后台最基础的开发就完成了。
这里只简略写了最基本的配置,如果需要支持更多类型的事件或消息,或者主动通过api接口向公众平台推送,请参阅wechatpy的文档吧,同时,有的操作也需要公众号具有相应的权限才可以。
ref.
http://www.cnblogs.com/ryhan/p/5011962.html
使用python django快速搭建微信公众号后台的更多相关文章
- 【技巧】如何使用客户端发布BLOG+如何快速发布微信公众号文章
		
[技巧]如何使用客户端发布BLOG+如何快速发布微信公众号文章 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也 ...
 - 使用flask搭建微信公众号:实现签到功能
		
终于到了实战阶段.用微信公众号实现一个简单的签到功能. 前情提要: 微信公众号token验证失败 使用flask搭建微信公众号:完成token的验证 使用flask搭建微信公众号:接收与回复消息 程序 ...
 - 使用Django快速搭建简单的数据管理后台
		
使用Django快速搭建简单的数据管理后台 概述 需求描述: 数据表已建好,能可视化操作增删改查,避免直接操作数据库 简版的管理系统 环境 Windows 10 x64 Python 3.6.3 (A ...
 - PHP微信公众号后台开发(Yii2实现)
		
本文内容较多,包括微信接入.获取微信用户信息.微信支付.JSSDK配置参数获取等部分.如果读者对微信开发没有一个主观上的认识,那么建议读者先研读微信公众平台开发者文档,然后再阅读本文,效果更佳!另外本 ...
 - Yii2.0实现微信公众号后台开发
		
接入微信 Yii2后台配置 1.在app/config/params.php中配置token参数 return [ //微信接入 'wechat' =>[ 'token' => 'your ...
 - Spring Boot 开发微信公众号后台
		
Hello 各位小伙伴,松哥今天要和大家聊一个有意思的话题,就是使用 Spring Boot 开发微信公众号后台. 很多小伙伴可能注意到松哥的个人网站(http://www.javaboy.org)前 ...
 - 在新浪SAE上搭建微信公众号的python应用
		
微信公众平台的开发者文档https://www.w3cschool.cn/weixinkaifawendang/ python,flask,SAE(新浪云),搭建开发微信公众账号http://www. ...
 - python利用wxpy监控微信公众号
		
此次利用wxpy可以进行微信公众号的消息推送监测(代码超级简单),这样能进行实时获取链接.但是不光会抓到公众号的消息,好友的消息也会抓到(以后会完善的,毕竟现在能用了,而且做项目的微信号肯定是没有好友 ...
 - 使用flask搭建微信公众号:完成token的验证
		
上一篇文章讨论了官方给的例子验证token失败的解决方法:微信公众号token验证失败 想了一下,还是决定不适用web.py这个框架.因为搜了一下他的中文文档不多,学起来可能会有点麻烦.而且看着他没有 ...
 
随机推荐
- Ubuntu常用命令及git常用命令
			
1. CMakeLists.txt中指定OpenCV路径 set(OPENCV_DIR /***/***/opencv-2.4.9) 2. cmake工程编译安装 mkdir build cd bui ...
 - 跨域方案JSONP与CORS的各自优缺点以及应用场景
			
转自 https://www.zhihu.com/question/41992168/answer/217903179 首先明确:JSONP与CORS的使用目的相同,并且都需要服务端和客户端同时支持, ...
 - Leetcode题目283.移动零(简单)
			
题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原 ...
 - Java锁优化
			
Java锁优化 应用程序在并发环境下会产生很多问题,通常情况下,我们可以通过加锁来解决多线程对临界资源的访问问题.但是加锁往往会成为系统的瓶颈,因为加锁和释放锁会涉及到与操作系统的交互,会有很大的性能 ...
 - Jmeter Web 性能测试入门 (二):Fiddler 抓取 http/https 请求
			
jmeter自带了拦截request的功能,并且也有对应的tool:badboy 可以用.但由于我经常做移动端的项目,个人还是习惯用fiddler来收集request. 官网下载并安装Fiddler ...
 - mysql密码设置为空怎么办?
			
由于很多童鞋安装使用MySQL时,安装时没有设置密码,或者像我一样图省事设置密码为空,想为其设置新密码: 1.点击 开始------>运行----在弹出的对话框中输入cmd 如下图: 2.使用 ...
 - ELK的安全解决方案 X-Pack(1)
			
安装 X-Pack 前必须安装 elasticsearch. Kibana.logstash,因为之前安装ELK选择的版本都是5.4.1,所以这次选择X-Pack的版本也要是5.4.1的 第一步:下载 ...
 - mongodb 报错 not authorized on admin to execute command【 version 3.2.18 】
			
mongodb version 3.2.18 测试问题: 分析: 从报错内容上看是权限不够,但不明了为什么,因为已经使用的超级用户权限: { "_id" : "admin ...
 - oracle赋予一个用户具有查询另一个用户所有表数据
			
一 以需要被查询的用户登录oracle(假如为A) B为要查询A用户下的表的用户 二 执行查询语句: select 'grant select on A.'|| tname ||' to B ...
 - Python实现按照指定要求逆序输出一个数字的方法
			
Python实现按照指定要求逆序输出一个数字的方法 这篇文章主要介绍了Python实现按照指定要求逆序输出一个数字的方法,涉及Python针对字符串的遍历.判断.输出等相关操作技巧,需要的朋友可以参考 ...