教你用python一步一步搭建微信公眾平臺(一)

教你用python一步一步搭建微信公眾平臺(一)

最近在學用python搭建微信公共號,使用的工具,python 新浪SAE平臺,微信的公眾平臺

你需要先在微信的公眾平臺與新浪SAE平臺上各種註冊,微信平臺註冊的時候需要你拍張手持身份證的照片,還有幾天的稽核期

微信公眾平臺:http://mp.weixin.qq.com

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

等待微信公眾稽核通過後,登入公眾平臺後,點選高階功能。將會看到需要提供一個接入資訊:這裡寫圖片描述
那麼我們需要一個網址作為介面(這時就需要SAE上搭建Python的一個應用),Token呢,就是相當於我們和微信之間約定的“密碼”,這裡可以隨便填寫英文或者數字,但實測輸入純數字有時會有問題,所以還是字串比較靠譜。

第一步,在SAE上搭建python的應用,在下圖的應用裡選擇python應用。
這裡寫圖片描述
填好二級域名和應用名稱等,選擇好語言。這裡我們使用Python開發選擇web應用。建立好應用之後,在程式碼管理中建立一個新的版本。而後我們可以選擇編輯程式碼。能夠實現線上編輯。可以使用git同步原生代碼。

第二步,編寫index.wsgi

因為我們使用的是web.py框架,因為其良好的xml解析,想了解web.py的童鞋可以移步 http://webpy.org/docs/0.3/tutorial.zh-cn

首先編寫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檔案,注意大小寫,寫入以下程式碼
這裡定義了一個GET方法,是根據微信公眾平臺的要求,進行的token驗證,因為這裡我們定義了templates_root為根目錄下的templates,所以還要在根目錄下建立一個目錄templates的目錄

# -*- 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="kobe2018" #這裡改寫你在微信公眾平臺裡輸入的token
#字典序排序
list=[token,timestamp,nonce]
list.sort()
sha1=hashlib.sha1()
map(sha1.update,list)
hashcode=sha1.hexdigest()
#sha1加密演算法        
#如果是來自微信的請求,則回覆echostr
if hashcode == signature:
return echostr

如果執行時報錯,發現沒有lxml模組,在應用的程式碼管理可以手動匯入,點選上傳程式碼包,只支援zip
這裡寫圖片描述

第三步,因為微信是將驗證資訊GET發出去的,所以這裡使用了GET方法來取得值並且返回相應用值儲存全部,現在回到微信的公眾平臺高階管理介面返回微信配置頁面在url裡面填寫你在新浪SAE裡應用名稱並且加上/weixin,如:http://XXXX.sinaapp.com/weixin token隨便輸入,只要注意更改weixinInterface.py中的token就行了,輸入好了以後點選提交,如果沒有什麼問題的話就會通過驗證!

第四步,新建一個簡單的自動回覆的方法,鸚鵡學舌,就是使用者說什麼,它也回覆什麼,沒什麼用,只是隨便玩玩!

在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
全部儲存,現在就在用你的個人微信關注一下你建立的公眾微訊號,然後隨便輸入些內容,如果沒有什麼問題,你將會收到一條鸚鵡學舌的回覆內容!