公众号平台指导网址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1472017492_58YV5
配置python开发环境就不再细说。
windows xp x86用户可参考:http://blog.csdn.net/qinmin5527/article/details/50902099
1.web环境配置
安装web.py环境
web.py是一个轻量级的python web框架,官网地址:http://webpy.org/
linux下安装:(这里我用的是树莓派),windows用户参见文章开头的地址。
sudo apt-get install python-webpy
安装python-lxml:
微信使用XML格式文件进行数据交换,需要使用lxml来解析
sudo apt-get install python-lxml
2.微信公众平台开发
首先放几个地址:
开发者文档 : http://mp.weixin.qq.com/wiki/home/index.html
接口测试号申请:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
接口调试工具:http://mp.weixin.qq.com/debug/
一开始平台还没有搭好的时候可以申请一个测试号,权限基本都有,方便调试。
建议开始之前浏览一下开发者文档中的接入指南。
微信要求的服务器配置如下图。可以看出,有两个必填项:URL,Token。其中URL就不必说了,服务器的地址(这里我申请了花生壳二级域名,放链接:http://hsk.oray.com/)。Token相当于你与微信约定的密码,一会微信会使用这个Token去连接你的服务器。随便填一串字符串就可以(要记下来)。
然后上代码:
(下面import的模块有些没有用到,不过没什么影响,自己判断吧)
'''
【功能】
1.响应微信发送的Token验证
2.接收用户文本信息
【更新日期】2016.03.17
'''
import os
import web
import time
import datetime
import hashlib
from lxml import etree
import requests
import json
import codecs
my_appid = '******************'
my_secret = '*****************************'
urls = ( '/','WeixinInterface' )
def _check_hash(data):
'''
响应微信发送的GET请求(Hash校验)
:param data: 接收到的数据
:return: True or False,是否通过验证
'''
signature=data.signature
timestamp=data.timestamp
nonce=data.nonce
token="qinminraspberrypi"
list=[token,timestamp,nonce]
list.sort()
sha1=hashlib.sha1()
map(sha1.update,list)
hashcode=sha1.hexdigest()
if hashcode == signature:
return True
return False
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 _reply_text(self, toUser, fromUser, msg):
'''
回复文本消息
:param fromUser:
:param toUser:
:param msg:要发送到的消息,文本格式
:return:
'''
return self.render.reply_text(toUser, fromUser, int(time.time()),msg + '\n\ntime: ' + now_time)
def _recv_text(self, fromUser, toUser, xml):
'''
接收到文本消息,自动回复
:param fromUser:
:param toUser:
:param xml:收到的xml文件
:return:
'''
content = xml.find('Content').text
reply_msg = content
return self._reply_text(fromUser, toUser, u'你刚才说的是:' + reply_msg )
def GET(self):
data = web.input()
if _check_hash(data):
return data.echostr
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':
return self._recv_text(fromUser, toUser, xml)
if __name__ == "__main__":
app = web.application(urls,globals())
app.run()
- 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
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
然后在你的py文件同级目录下新建一个templates文件夹,在文件夹中新建一个xml文件: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>
OK,保存,使用命令行运行你的py文件,返回一个网址:http://0.0.0.0:8080/
【未完待续】