1. 為什么學(xué)習(xí)Pythone
最近一段時(shí)間一直在研究一個(gè)項(xiàng)目音同,想進(jìn)行市場(chǎng)化。如果直接開(kāi)發(fā)軟件的話感覺(jué)難度太大,但是如果是開(kāi)發(fā)一個(gè)微信公眾號(hào)骇吭,感覺(jué)難度小一些,剛好自己有一個(gè)訂閱號(hào)歧寺,也已經(jīng)通過(guò)了實(shí)名認(rèn)證燥狰。就想說(shuō)先拿這個(gè)微信號(hào)練練手,看自己一個(gè)人能開(kāi)發(fā)到什么程度斜筐。于是說(shuō)干就干了龙致。
2.前期準(zhǔn)備工作
2.1云平臺(tái)選擇
現(xiàn)在網(wǎng)絡(luò)程序開(kāi)發(fā)比以前好太多了,有很多的云平臺(tái)可以選擇顷链。不像10年前目代,想開(kāi)展一個(gè)網(wǎng)絡(luò)服務(wù)首先就要考慮服務(wù)器、帶寬嗤练、IP地址等等榛了。這些云平臺(tái)都包含了。我知道的國(guó)內(nèi)的云平臺(tái)就只有阿里云和新浪云煞抬,兩個(gè)都去看了看霜大,感覺(jué)新浪云的界面簡(jiǎn)單些,于是就充值了100元革答,開(kāi)始在新浪云部署服務(wù)了战坤。 步驟如下
1.新浪云申請(qǐng)賬號(hào)
新浪云的賬號(hào)是和新浪微博關(guān)聯(lián)的,只要有微博賬號(hào)就可以登陸了残拐。
創(chuàng)建一個(gè)Python應(yīng)用途茫。
2.學(xué)會(huì)GIT 命令
新浪云上的Python只能使用GIT和SVN兩種方式上傳代碼,我兩種都不會(huì)蹦骑,但是GIT好像名氣大一點(diǎn)慈省,就選擇了GIT方式。
不得不說(shuō)眠菇,GIT的入門還是有一定的門檻的边败,反正一開(kāi)始是把我弄得暈頭轉(zhuǎn)向。這里總結(jié)一下大概的步驟
1.下載安裝Git軟件捎废,官網(wǎng)上下載笑窜,具體步驟就不說(shuō)了。
2.在電腦上建立文件夾登疗,作為代碼倉(cāng)庫(kù)排截。
3.進(jìn)入文件夾嫌蚤,右擊鼠標(biāo),選擇 Git Bash Here断傲,進(jìn)入Git 命令行界面脱吱。
git init #初始化當(dāng)前文件夾為倉(cāng)庫(kù)
git remote add sae https://sae.sinacloud.com/'你的應(yīng)用名'
git add . #.代表所有文件,也可以輸入具體文件名
git commit -am"這里是注釋"
git push sae master:1 #代表把本地master分支的代碼认罩,push到遠(yuǎn)端sae庫(kù)的版本1上
基本上熟悉以后就只用add箱蝠,commit push 三個(gè)命令了,還是挺方便的垦垂。
”最好固定一個(gè)終端進(jìn)行開(kāi)發(fā)宦搬,換終端需要用git clone 命令先將遠(yuǎn)端的文件克隆過(guò)來(lái), 再進(jìn)行修改上傳
3.Python 開(kāi)發(fā)
3.1 Python 基礎(chǔ)
我之前一點(diǎn)都沒(méi)學(xué)過(guò)劫拗,買過(guò)一本老外寫的書间校,翻譯的也挺晦澀,不太好懂页慷。網(wǎng)絡(luò)上的教程很多憔足,我推薦廖雪峰的Python3教程,寫的深入淺出,一開(kāi)始簡(jiǎn)單的語(yǔ)句還有在線助手可以進(jìn)行測(cè)試差购。
3.2 了解微信公眾號(hào)接口規(guī)則
3.2.1 公眾號(hào)接口配置
url 就是在新浪云上申請(qǐng)的應(yīng)用地址
token 自己設(shè)置四瘫,相當(dāng)于驗(yàn)證的口令
解密方式選擇明文
3.2.2 公眾號(hào)接口通信原理
開(kāi)發(fā)者提交信息后,微信服務(wù)器將發(fā)送GET請(qǐng)求到填寫的服務(wù)器地址URL上欲逃,GET請(qǐng)求攜帶參數(shù)如下表所示:
參數(shù) | 描述 |
---|---|
signature | 微信加密簽名找蜜,signature結(jié)合了開(kāi)發(fā)者填寫的token參數(shù)和請(qǐng)求中的timestamp參數(shù)、nonce參數(shù)稳析。 |
timestamp | 時(shí)間戳 |
nonce | 隨機(jī)數(shù) |
echostr | 隨機(jī)字符串 |
開(kāi)發(fā)者通過(guò)檢驗(yàn)signature對(duì)請(qǐng)求進(jìn)行校驗(yàn)(下面有校驗(yàn)方式)洗做。若確認(rèn)此次GET請(qǐng)求來(lái)自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷豦chostr參數(shù)內(nèi)容彰居,則接入生效诚纸,成為開(kāi)發(fā)者成功,否則接入失敗陈惰。加密/校驗(yàn)流程如下:
1)將token畦徘、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序
2)將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行sha1加密
3)開(kāi)發(fā)者獲得加密后的字符串可與signature對(duì)比抬闯,標(biāo)識(shí)該請(qǐng)求來(lái)源于微信
微信自帶了一段php代碼:
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
不過(guò)這段代碼有點(diǎn)坑井辆,因?yàn)楦鶕?jù)我的實(shí)測(cè),最后返回的是字符溶握,不是布爾值杯缺。這里我主要參考了這篇文章。
最后的的編程結(jié)果如下
- config.yaml
name: qlife
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 = (
'/','WeixinInterface'
) #凡是調(diào)用qlife地址的睡榆,都轉(zhuǎn)由微信接口處理
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)
-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 GET(self):
data = web.input()
signature = data.signature
timestamp = data.timestamp
nonce = data.nonce
token = 'qlife'
echostr = data.echostr
list = [token,timestamp,nonce]
list.sort()
list2 = ''.join(list)
sha1 = hashlib.sha1()
sha1.update(list2.encode('utf-8'))
hashcode = sha1.hexdigest()
if hashcode == signature:
return echostr
因?yàn)閙arkdown編輯器的問(wèn)題萍肆,以上代碼的縮進(jìn)有些問(wèn)題袍榆,需要手動(dòng)縮進(jìn)。
提幾個(gè)需要注意的點(diǎn)塘揣。
1.算hash的時(shí)候包雀,需要加上encode方法 ,表明用utf-8勿负,
2.字符串合并用.join