使用python一步一步搭建微信公众平台(一)

最近无聊,想玩玩微信的公众平台,后来发现乐趣无穷啊~python

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

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

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

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

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

微信接口配置

微信接口配置api

那么咱们须要一个网址做为接口(这时就须要SAE上搭建Python的一个应用),Token呢,就是至关于咱们和微信之间约定的“密码”,这里能够随便填写英文或者数字,但实测输入纯数字有时会有问题,因此仍是字符串比较靠谱。服务器

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

iELK05K8pJTk2

 

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

第二步,编写index.wsgi

由于咱们使用的是web.py框架,由于其良好的xml解析,想了解web.py的童鞋能够移步 http://webpy.org/docs/0.3/tutorial.zh-cn

首先编写config.yaml


?

1
2
3
4
5
6
7
8
9
10
11
name: yangyanxing
version:  1
 
libraries:
-  name: webpy 
   version:  "0.36"
 
-  name: lxml
   version:  "2.3.4"
 
...

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

接着咱们继续编写index.wsgi

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 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文件,注意大小写,写入如下代码

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# -*- 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的目录

1 开发者经过检验signature对请求进行校验(下面有校验方式)。若确认这次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,不然接入失败。
2
3 signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
4
5 加密/校验流程:
6 1. 将token、timestamp、nonce三个参数进行字典序排序
7 2. 将三个参数字符串拼接成一个字符串进行sha1加密
8 3. 开发者得到加密后的字符串可与signature对比,标识该请求来源于微信

由于微信是将验证信息GET发出去的,因此这里使用了GET方法来取得值而且返回相应用值

保存所有,如今回到微信的公众平台高级管理界面

微信接口配置

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

 

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

在weixinInterface.py里继续添加代码

?

1
2
3
4
5
6
7
8
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模板文件,写入如下代码

?

1
2
3
4
5
6
7
8
$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 

所有保存,如今就在用你的我的微信关注一下你建立的公众微信号,而后随便输入些内容,若是没有什么问题,你将会收到一条鹦鹉学舌的回复内容!

接下来,咱们利用有道的翻译api作一个翻译的小工具

使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具

使用python一步一步搭建微信公众平台(三)----添加用户关注后的欢迎信息与听音乐功能

使用python一步一步搭建微信公众平台(四)----将小黄鸡引入微信自动回复

使用python一步一步搭建微信公众平台(五)----使用mysql服务来记录用户的反馈

 

参考文章:http://www.nilday.com/%E5%88%A9%E7%94%A8sae%E6%90%AD%E5%BB%BA%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%B9%B3%E5%8F%B0%EF%BC%88%E4%B8%80%EF%BC%89web-py%E5%AE%9E%E7%8E%B0%E7%9A%84sae-hello-world/

相关文章
相关标签/搜索