轻松实现python搭建微信公众平台


Posted in Python onFebruary 16, 2016

本文主要是一步一步教大家如何利用python搭建微信公众平台,有兴趣的朋友可以参考一下

使用的工具,python 新浪SAE平台,微信的公众平台

你需要先在微信的公众平台与新浪SAE平台上各种注册,微信平台注册的时候需要你拍张手持身份证的照片,还有几天的审核期

微信公众平台:http://mp.weixin.qq.com

新浪SAE:http://sae.sina.com.cn/

等待微信公众审核通过后,登录公众平台后,点击高级功能。将会看到需要提供一个接入信息:

轻松实现python搭建微信公众平台

微信接口配置

那么我们需要一个网址作为接口(这时就需要SAE上搭建Python的一个应用),Token呢,就是相当于我们和微信之间约定的“密码”,这里可以随便填写英文或者数字,但实测输入纯数字有时会有问题,所以还是字符串比较靠谱。

第一步,在SAE上搭建python的应用,在下图的应用里选择python应用。

轻松实现python搭建微信公众平台

 填好二级域名和应用名称等,选择好语言。这里我们使用Python开发选择web应用。创建好应用之后,在代码管理中创建一个新的版本。而后我们可以选择编辑代码。能够实现在线编辑,根本用不着配置本地环境,SVN等等。当然像这种轻量级的应用在线编辑器就可以了,SVN的话还不如在线编辑好用

第二步,编写index.wsgi

因为我们使用的是web.py框架,因为其良好的xml解析。

首先编写config.yaml

name: yangyanxing
version: 1
 
libraries:
- name: webpy 
 version: "0.36"
 
- name: lxml
 version: "2.3.4"
 
...

注意严格的缩进,差一个空格你就废了!而且调试的时候很不好发现问题。。。

接着我们继续编写index.wsgi

# coding: UTF-8
import os
 
import sae
import web
 
from weixinInterface import WeixinInterface
 
urls = (
'/weixin','WeixinInterface'
)
 
app_root = os.path.dirname(__file__)
templates_root = os.path.join(app_root, 'templates')
render = web.template.render(templates_root)
 
app = web.application(urls, globals()).wsgifunc()  
application = sae.create_wsgi_app(app)

简单解释一下,

from weixinInterface import WeixinInterface
这里我们需要再创建一个weixinInterface的py文件,你也可以将这个类写在index.wsgi文件中,只是这样看起来会乱乱的

新建一个weixinInterface.py文件,注意大小写,写入以下代码

# -*- coding: utf-8 -*-
import hashlib
import web
import lxml
import time
import os
import urllib2,json
from lxml import etree
 
class WeixinInterface:
 
 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):
  #获取输入参数
  data = web.input()
  signature=data.signature
  timestamp=data.timestamp
  nonce=data.nonce
  echostr=data.echostr
  #自己的token
  token="yangyanxing" #这里改写你在微信公众平台里输入的token
  #字典序排序
  list=[token,timestamp,nonce]
  list.sort()
  sha1=hashlib.sha1()
  map(sha1.update,list)
  hashcode=sha1.hexdigest()
  #sha1加密算法  
 
  #如果是来自微信的请求,则回复echostr
  if hashcode == signature:
   return echostr

这里定义了一个GET方法,是根据微信公众平台的要求,进行的token验证,因为这里我们定义了templates_root为根目录下的templates,所以还要在根目录下创建一个目录templates的目录

轻松实现python搭建微信公众平台

因为微信是将验证信息GET发出去的,所以这里使用了GET方法来取得值并且返回相应用值

保存全部,现在回到微信的公众平台高级管理界面

微信接口配置

在url里面填写你在新浪SAE里应用名称并且加上/weixin,如:http://XXXX.sinaapp.com/weixin token随便输入,只要注意更改weixinInterface.py中的token就行了,输入好了以后点击提交,如果没有什么问题的话就会通过验证!

 轻松实现python搭建微信公众平台

第三步,新建一个简单的自动回复的方法,鹦鹉学舌,就是用户说什么,它也回复什么,没什么用,只是随便玩玩!

在weixinInterface.py里继续添加代码

def POST(self):  
  str_xml = web.data() #获得post来的数据
  xml = etree.fromstring(str_xml)#进行XML解析
  content=xml.find("Content").text#获得用户所输入的内容
  msgType=xml.find("MsgType").text
  fromUser=xml.find("FromUserName").text
  toUser=xml.find("ToUserName").text
  return self.render.reply_text(fromUser,toUser,int(time.time()),u"我现在还在开发中,还没有什么功能,您刚才说的是:"+content)

 这个def 是和上一个GET同级的,注意缩进

接着我们在templates目录下创建reply_text.xml模板文件,写入以下代码

$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>

注意这里的toUser与fromUser是刚才post的是相反的,因为这里的toUser也就是POST函数里的fromUser,这里的fromUser也就是POST函数里的toUser,msgType是text

全部保存,现在就在用你的个人微信关注一下你创建的公众微信号,然后随便输入些内容,如果没有什么问题,你将会收到一条鹦鹉学舌的回复内容!

以上就是python搭建微信公众平台的全部内容,大家可以根据以上步骤进行搭建。

Python 相关文章推荐
Python中的字典遍历备忘
Jan 17 Python
Python 备份程序代码实现
Mar 06 Python
python 基本数据类型占用内存空间大小的实例
Jun 12 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
Jul 04 Python
Python处理session的方法整理
Aug 29 Python
使用python获取邮箱邮件的设置方法
Sep 20 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
Dec 02 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
Python random库使用方法及异常处理方案
Mar 02 Python
Python爬虫爬取百度搜索内容代码实例
Jun 05 Python
python图片验证码识别最新模块muggle_ocr的示例代码
Jul 03 Python
在Python中如何使用yield
Jun 07 Python
十条建议帮你提高Python编程效率
Feb 16 #Python
bpython 功能强大的Python shell
Feb 16 #Python
深入解读Python解析XML的几种方式
Feb 16 #Python
Python3.2模拟实现webqq登录
Feb 15 #Python
python编码最佳实践之总结
Feb 14 #Python
Python在Console下显示文本进度条的方法
Feb 14 #Python
如何使用python爬取csdn博客访问量
Feb 14 #Python
You might like
超人钢铁侠联手合作?美漫作家呼吁DC漫威合作联动以抵抗疫情
2020/04/09 欧美动漫
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
JQuery优缺点分析说明
2011/04/10 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
2017/04/11 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
2018/01/25 Javascript
开发用到的js封装方法(20种)
2018/10/12 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
python实现二叉树的遍历
2017/12/11 Python
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
python 普通克里金(Kriging)法的实现
2019/12/19 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
pycharm安装及如何导入numpy
2020/04/03 Python
python对一个数向上取整的实例方法
2020/06/18 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
2020/12/07 Python
python脚本定时发送邮件
2020/12/22 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
生产厂厂长岗位职责
2013/12/25 职场文书
个人查摆剖析材料
2014/02/04 职场文书
数学高效课堂实施方案
2014/03/29 职场文书
节约用水标语
2014/06/11 职场文书
java泛型通配符详解
2021/07/25 Java/Android