微信公众号Pyhton开发
编写上传代码到SAE
1.申请SAE(sina application enginer),创建应用,SAE使用文档
2.编写上传代码
weixin.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
| import web import os import hashlib import time
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="wxpython"
l=[token,timestamp,nonce] l.sort() sha1=hashlib.sha1() map(sha1.update,l) hashcode=sha1.hexdigest()
if hashcode == signature: return echostr
|
index.wsgi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #-*-coding:utf-8-*-
import os import sae import web from weixin 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)
|
config.yaml
1 2 3 4 5 6 7 8 9 10 11 12
| name: wxpytest version: 1
libraries: - name: webpy version: "0.36"
- name: lxml version: "2.3.4"
...
|
3.微信公众号修改服务器配置
Token与代码中编写的保持一致,URL也要与指定的一致(即...\weixin
)。
注意直接访问<http://vxquan.applinzi.com/weixin>
是会报错的,但是可以通过微信公众平台的认证(因为直接访问是没有参数的,data=web.input没有异常处理)
处理普通文本信息
1 2 3 4 5 6 7 8
| <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml>
|
▲.注意这边的OpenID不是真正的用户ID,不同公众号对相同用户获得的OpenID是不同的,换言之,这个只是该公众号能获得该用户的一个ID。
1 2 3 4 5 6 7 8 9 10
| def POST(self): str_xml=web. data() xml=etree.fromstring(str_xml) msgType=xml.find("MsgType").text fromuser=xml.find("FromUserName").text touser=xml.find("ToUserName").text if msgType=="text": content=xml. find("Content").text return self.render.reply_text(fromuser,touser,int(time.time()),content)
|
记遇到的坑:
- 1.POST好像必须要有处理,返回信息
-
- python2.7下字符串加u