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


最近無聊,想玩玩微信的公眾平台,后來發現樂趣無窮啊~

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

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

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

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

等待微信公眾審核通過后,登錄公眾平台后,點擊高級功能。將會看到需要提供一個接入信息:

微信接口配置

微信接口配置

那么我們需要一個網址作為接口(這時就需要SAE上搭建Python的一個應用),Token呢,就是相當於我們和微信之間約定的“密碼”,這里可以隨便填寫英文或者數字,但實測輸入純數字有時會有問題,所以還是字符串比較靠譜。

第一步,在SAE上搭建python的應用,在下圖的應用里選擇python應用。

iELK05K8pJTk2

 

填好二級域名和應用名稱等,選擇好語言。這里我們使用Python開發選擇web應用。創建好應用之后,在代碼管理中創建一個新的版本。而后我們可以選擇編輯代碼。能夠實現在線編輯,根本用不着配置本地環境,SVN等等。當然像這種輕量級的應用在線編輯器就可以了,SVN的話還不如在線編輯好用

第二步,編寫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文件,注意大小寫,寫入以下代碼

# -*- 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里繼續添加代碼

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 

全部保存,現在就在用你的個人微信關注一下你創建的公眾微信號,然后隨便輸入些內容,如果沒有什么問題,你將會收到一條鸚鵡學舌的回復內容!

接下來,我們利用有道的翻譯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/

 

原網址:https://my.oschina.net/yangyanxing/blog/159215

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM