使用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/

相關文章
相關標籤/搜索