最近学习Python,发现可以使用python来开发微信公众平台,就想尝试一下。因为微信公众平台的开发者模式需要用到服务器,自己的电脑不可能整天开着,所以拿自己电脑当服务器有点不太现实,所以我选择了将应用部署到了BAE上,其实部署到SAE上也是可以的。
首先申请一个微信公众号以及一个bae账号。在bae上创建一个python-web应用。使用SVN将应用内容CheckOut到本地会看到
然后对index.py进行编辑,输入以下代码
#coding:utf-8
from bottle import *
import hashlib
import xml.etree.ElementTree as ET
import urllib2
import json
import time
app=Bottle()
@app.get("/")
def checkSignature():
token="shgweixin"
signature=request.GET.get('signature',None)
timestamp=request.GET.get('timestamp',None)
nonce=request.GET.get('nonce',None)
echostr=request.GET.get('echostr',None)
tmpList=[token,timestamp,nonce]
tmpList.sort()
tmpstr="%s%s%s"%tuple(tmpList)
hashstr=hashlib.sha1(tmpstr).hexdigest()
if hashstr==signature:
return echostr
else:
return False
def parse_msg():
recvmsg=request.body.read()
root=ET.fromstring(recvmsg)
msg={}
for child in root:
msg[child.tag]=child.text
return msg
@app.post("/")
'''
这边的代码是为了是公众号自动回复用户发送的消息
'''
def response_msg():
msg=parse_msg()
echostr="""<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>"""%(msg['FromUserName'],msg['ToUserName'],time.time(),"text",msg['Content'])
return echostr
if __name__=="__main__":
debug(True)
run(app,host='127.0.0.1',port=8080,reloader=True)
else:
from bae.core.wsgi import WSGIApplication
application = WSGIApplication(app)
因为用到了bottle的框架,所以需要下载bottle.py放在同一目录下
然后COMMIT,在bae中选择快捷发布,将新的应用发布到网上。
在微信公众平台管理中选择“开发者中心”-->“修改配置”,填写相应的内容
url:百度云服务器上的域名
token:用于验证的内容(需要个代码段中token内容一致)
之后点击提交,没有错误之后,开发者模式就启用了。
这时候可以向公众号发送消息,公众号会回复一样的内容。如果发送消息提示“该公众号暂时无法提供服务,请稍后再试”那就说明代码有一定的问题,需要修改。