前言

使用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快速搭建微信公众号后台的更多相关文章

  1. 【技巧】如何使用客户端发布BLOG+如何快速发布微信公众号文章

    [技巧]如何使用客户端发布BLOG+如何快速发布微信公众号文章   1  BLOG文档结构图     2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也 ...

  2. 使用flask搭建微信公众号:实现签到功能

    终于到了实战阶段.用微信公众号实现一个简单的签到功能. 前情提要: 微信公众号token验证失败 使用flask搭建微信公众号:完成token的验证 使用flask搭建微信公众号:接收与回复消息 程序 ...

  3. 使用Django快速搭建简单的数据管理后台

    使用Django快速搭建简单的数据管理后台 概述 需求描述: 数据表已建好,能可视化操作增删改查,避免直接操作数据库 简版的管理系统 环境 Windows 10 x64 Python 3.6.3 (A ...

  4. PHP微信公众号后台开发(Yii2实现)

    本文内容较多,包括微信接入.获取微信用户信息.微信支付.JSSDK配置参数获取等部分.如果读者对微信开发没有一个主观上的认识,那么建议读者先研读微信公众平台开发者文档,然后再阅读本文,效果更佳!另外本 ...

  5. Yii2.0实现微信公众号后台开发

    接入微信 Yii2后台配置 1.在app/config/params.php中配置token参数 return [ //微信接入 'wechat' =>[ 'token' => 'your ...

  6. Spring Boot 开发微信公众号后台

    Hello 各位小伙伴,松哥今天要和大家聊一个有意思的话题,就是使用 Spring Boot 开发微信公众号后台. 很多小伙伴可能注意到松哥的个人网站(http://www.javaboy.org)前 ...

  7. 在新浪SAE上搭建微信公众号的python应用

    微信公众平台的开发者文档https://www.w3cschool.cn/weixinkaifawendang/ python,flask,SAE(新浪云),搭建开发微信公众账号http://www. ...

  8. python利用wxpy监控微信公众号

    此次利用wxpy可以进行微信公众号的消息推送监测(代码超级简单),这样能进行实时获取链接.但是不光会抓到公众号的消息,好友的消息也会抓到(以后会完善的,毕竟现在能用了,而且做项目的微信号肯定是没有好友 ...

  9. 使用flask搭建微信公众号:完成token的验证

    上一篇文章讨论了官方给的例子验证token失败的解决方法:微信公众号token验证失败 想了一下,还是决定不适用web.py这个框架.因为搜了一下他的中文文档不多,学起来可能会有点麻烦.而且看着他没有 ...

随机推荐

  1. Ryu控制器安装部署和入门

    Ryu官网简介,原滋原味 Ryu is a component-based software defined networking framework. Ryu provides software c ...

  2. spring+mybatis事务的readonly属性无效

    在Spring配置事务中设置的read-only="true"不起作用,仍可以执行写操作:但是其他的正常.查看了一下DataSourceTransactionManager这个类的 ...

  3. 多项式fft、ntt、fwt 总结

    做了四五天的专题,但是并没有刷下多少题.可能一开始就对多项式这块十分困扰,很多细节理解不深. 最简单的形式就是直接两个多项式相乘,也就是多项式卷积,式子是$N^2$的.多项式算法的过程就是把卷积做一种 ...

  4. kotlin数据解构

    fun main(arg: Array<String>) { val person = person("tom") var (name) = person//解构 pr ...

  5. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_14-页面静态化-数据模型-远程请求接口

    okhttp的官方文档: https://square.github.io/okhttp/ github的地址 https://github.com/square/okhttp/ 如何远程请求轮播图的 ...

  6. sqlmap注入工具----一次简单的注入(实战)

    最近在学习网络安全,挖洞避免不了要使用许多工具,使用著名注入工具sqlmap的时候,对于英语不怎么好的我就比较难受了,本来就不会使用,加之又是英语的,简直难受.上网找了好多详细教程,但是命令实在是太多 ...

  7. Vue打包文件放在服务器后,浏览器存在缓存问题

    每次打包更新版本发到服务器上,导致偶尔会出现不能即使更新最新代码,浏览器存在缓存的问题. 解决方法:找到webpack .prod.conf.js 1.定义版本变量: const  Version = ...

  8. Apache实现一台服务器上运行多个网站

    总共有三种方法:通过不同的IP地址 通过不同的域名 通过不同的端口号 (1).通过不同的IP地址实现 例如一台CentOS7有两个IP:192.168.5.101和192.168.5.103 [roo ...

  9. PowerDesigner常用命令

    在Tools=>Execute Commands下的Edit/Run Scripts,或者通过Ctrl+Shift+X就可以运行脚本.如图: 1.将所有的表名和列名都修改为大写 '******* ...

  10. Spring Aop(七)——基于XML配置的Spring Aop

    转发:https://www.iteye.com/blog/elim-2396043 7 基于XML配置的Spring AOP 基于XML配置的Spring AOP需要引入AOP配置的Schema,然 ...