Skip to content

Commit 801bd69

Browse files
committed
减少果断
1 parent a6ca498 commit 801bd69

File tree

4 files changed

+80
-27
lines changed

4 files changed

+80
-27
lines changed

README.md

Lines changed: 77 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,47 @@
2424

2525
WxApplication内部会实现请求的合法性校验以及消息的分发等功能,还对上行消息对行了结构化,开发者把精力放到业务逻辑的编写即可。
2626

27-
下面先看看一个WxApplication的示例代码:
27+
WxApplication类核心方法:
28+
29+
### WxApplication.process(params, xml, token=None, app_id=None, aes_key=None)
30+
31+
WxApplication的process函数,接受以下参数:
32+
33+
- params, url参数字典,需要解析自微信回调的url的querystring。格式如:{'nonce': 1232, 'signature': 'xsdfsdfsd'}
34+
- xml, 微信回调时post的xml内容。
35+
- token, 公众号的上行token,可选,允许在子类配置。
36+
- app_id, 公众号应用id,可选,允许在子类配置。
37+
- aes_key, 公众号加密secret,可选,允许在子类配置。
38+
39+
process最后返回一串文本(xml或echoStr)。
40+
41+
42+
#### 使用场景1:上行URL有效性验证
43+
44+
在微信公众号的后台设置好URL及token等相关信息后,微信会通过GET的方式访问一次该URL,开发者在URL的响应程序里直接调用app.process(params, xml=None)即可返回echStr。
45+
46+
qs = 'nonce=1221&signature=19selKDJF&timestamp=12312'
47+
query = dict([q.split('=') for q in qs.split('&')])
48+
app = YourApplication()
49+
echo_str = app.process(query, xml=None)
50+
# 返回echo_str给微信即可
51+
52+
53+
#### 使用场景2:处理上行消息
54+
55+
用户在微信公众号上发消息给公众号,微信服务器调用上行的URL,开发者需要对每次的的请求进行合法性校验及对消息进行处理,同样的,直接调用app.process方法就好。
56+
57+
qs = 'nonce=1221&signature=19selKDJF&timestamp=12312'
58+
query = dict([q.split('=') for q in qs.split('&')])
59+
body = '<xml> ..... </xml>'
60+
app = YourApplication()
61+
result = app.process(query, xml=body)
62+
# 返回result给微信即可
63+
64+
65+
### WxApplication子类示例
66+
67+
下面先看看一个WxApplication的示例代码,用于把用户上行的文本返还给用户:
2868

2969
from wechat.official import WxApplication, WxTextResponse, WxMusic,\
3070
WxMusicResponse
@@ -38,18 +78,8 @@ WxApplication内部会实现请求的合法性校验以及消息的分发等功
3878
def on_text(self, text):
3979
return WxTextResponse(text.Content, text)
4080
41-
def on_image(self, image):
42-
return WxTextResponse(image.Url, image)
43-
44-
def on_click(self, click):
45-
return WxMusicResponse(
46-
WxMusic(Title='hey jude',
47-
Description='dont make it bad',
48-
PicUrl='http://heyjude.com/logo.png',
49-
Url='http://heyjude.com/mucis.mp3'),
50-
click)
5181
52-
需要配置几个类参数,几个参数均可在公众号管理后台的开发者相关页面找到
82+
需要配置几个类参数,几个参数均可在公众号管理后台的开发者相关页面找到,前三个参数如果不配置,则需要在调用process方法时传入。
5383

5484
- SECRET_TOKEN: 微信公众号回调的TOKEN
5585
- APP_ID: 微信公众号的应用ID
@@ -104,7 +134,7 @@ req是一个代表用户上行消息的WxRequest实例。其属性与消息的XM
104134

105135
#### WxResponse
106136

107-
on_xxx函数需要返回一个WxResponse的子类实例。WxResponse的子类有
137+
on_xxx函数需要返回一个WxResponse的子类实例。WxResponse的子类及其构造的方式有
108138

109139
##### WxTextResponse, 文本消息
110140

@@ -139,18 +169,7 @@ on_xxx函数需要返回一个WxResponse的子类实例。WxResponse的子类有
139169

140170
WxEmptyResponse(req)
141171

142-
### 在web中使用WxApplication
143-
144-
编写完成WxApplication后,将其应用于您熟悉的web框架当中即可。关键是在web程序里调用WxApplication的process方法,后续的事情交给SDK来处理。
145-
146-
#### process(params, xml)
147-
148-
WxApplication的process函数,接受两个必须的参数:
149-
150-
- params, url参数字典,需要解析自微信回调的url的querystring。
151-
- xml, 微信回调时post的xml内容。
152-
153-
process最后返回一串文本(xml或空字符串)。
172+
### 在Django中使用WxApplication
154173

155174

156175
下面以Django为例说明,实现一个微信回调的功能(view),利用上面示例代码中的WxApp:
@@ -168,8 +187,41 @@ process最后返回一串文本(xml或空字符串)。
168187
url(r'^wechat/', 'myapp.views.wechat'),
169188
)
170189

190+
191+
### 在Flask中使用WxApplication
192+
from flask import request
193+
from flask import Flask
194+
app = Flask(__name__)
195+
196+
@app.route('/wechat')
197+
def wechat():
198+
app = WxApp()
199+
return app.process(request.args, request.data)
200+
201+
171202
OK.就这么多,WxApplication本身与web框架无关,不管你使用哪个Framework都可以享受到它带来的便利。
172203

204+
### 什么?你不喜欢写WxApplication的子类?!
205+
206+
好吧,其实,你可以在任何地方写on_xxx的响应函数。然后在使用之前,告诉一个WxApplication你要用哪个函数来响应对应的事件就好。以Django为例:
207+
208+
# 在任何地方写你自己的消息处理函数。
209+
# @any_decorator # 添加任何装饰器。
210+
def my_text_handler(req):
211+
return WxTextResponse(req.Content, req)
212+
213+
# 在web的程序里这样使用:
214+
def wechat_view(request):
215+
app = WxApplication() # 实例化基类就好。
216+
app.handlers = {'text': my_text_handler} # 设置你自己的处理器
217+
result = app.process(request.GET, request.body,
218+
token='xxxx', app_id='xxxx', aes_key='xxxx')
219+
return HttpResponse(result)
220+
221+
222+
嗯,可以自定义消息的handlers,而如果要针对事件自定义handlers的话,要修改app.event_handlers,数据的格式是一样的。具体的消息和事件类型的key,就直接看看源码得了。卡卡。
223+
224+
173225
## 3. OAuth API
174226

175227
OAuth API目前仅支持下列常用接口:

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
maintainer_email="bbmyth@gmail.com",
1515
url = url,
1616
long_description=long_description,
17+
install_requires = ['requests'],
1718
packages=find_packages('.'),
1819
)
1920

wechat/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
#encoding=utf-8
2-
VERSION = "0.4.11"
2+
VERSION = "0.4.12"
33

wechat/official.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from hashlib import sha1
44
import requests
5-
import simplejson as json
5+
import json
66
import tempfile
77
import shutil
88
import os

0 commit comments

Comments
 (0)