@@ -8,36 +8,45 @@ from pywe_wxa_qrcode import get_wxa_code_unlimit |
||
8 | 8 |
from miniapp.models import SceneInfo |
9 | 9 |
from utils.qiniucdn import qiniu_file_url, upload |
10 | 10 |
from utils.redis.connect import r |
11 |
+from utils.redis.rwxacode import get_wxa_code_qiniu_url, get_wxa_code_scene_, set_wxa_code_info |
|
11 | 12 |
|
12 | 13 |
|
13 | 14 |
WECHAT = settings.WECHAT |
14 | 15 |
|
15 | 16 |
|
17 |
+# Support API Cache |
|
16 | 18 |
def get_wxa_code(request): |
17 | 19 |
scene = request.POST.get('scene', '') |
18 | 20 |
page = request.POST.get('page', '') |
19 | 21 |
|
20 |
- si, created = SceneInfo.objects.get_or_create(scene=scene, page=page, status=True) |
|
22 |
+ qiniu_url = get_wxa_code_qiniu_url(scene, page) |
|
21 | 23 |
|
22 |
- if si.qiniu_url: |
|
24 |
+ if qiniu_url: |
|
23 | 25 |
return response(data={ |
24 |
- 'qiniu_url': si.qiniu_url, |
|
26 |
+ 'qiniu_url': qiniu_url, |
|
25 | 27 |
}) |
26 | 28 |
|
27 |
- wxcfg = WECHAT.get('MINIAPP', {}) |
|
29 |
+ si, created = SceneInfo.objects.get_or_create(scene=scene, page=page, status=True) |
|
30 |
+ |
|
31 |
+ qiniu_url = si.qiniu_url |
|
32 |
+ |
|
33 |
+ if not qiniu_url: |
|
34 |
+ wxcfg = WECHAT.get('MINIAPP', {}) |
|
35 |
+ |
|
36 |
+ appid = wxcfg.get('appID') |
|
37 |
+ secret = wxcfg.get('appsecret') |
|
28 | 38 |
|
29 |
- appid = wxcfg.get('appID') |
|
30 |
- secret = wxcfg.get('appsecret') |
|
39 |
+ res = get_wxa_code_unlimit(si.sid, page, res_to_base64=False, appid=appid, secret=secret, storage=RedisStorage(r)) |
|
31 | 40 |
|
32 |
- res = get_wxa_code_unlimit(si.sid, page, res_to_base64=False, appid=appid, secret=secret, storage=RedisStorage(r)) |
|
41 |
+ if res.headers and res.headers.get('Content-disposition'): |
|
42 |
+ qiniu_url = qiniu_file_url(upload(res.content)) |
|
43 |
+ else: |
|
44 |
+ qiniu_url = '' |
|
33 | 45 |
|
34 |
- if res.headers and res.headers.get('Content-disposition'): |
|
35 |
- qiniu_url = qiniu_file_url(upload(res.content)) |
|
36 |
- else: |
|
37 |
- qiniu_url = '' |
|
46 |
+ si.qiniu_url = qiniu_url |
|
47 |
+ si.save() |
|
38 | 48 |
|
39 |
- si.qiniu_url = qiniu_url |
|
40 |
- si.save() |
|
49 |
+ set_wxa_code_info(scene, page, qiniu_url, si.sid) |
|
41 | 50 |
|
42 | 51 |
return response(data={ |
43 | 52 |
'qiniu_url': qiniu_url, |
@@ -47,6 +56,13 @@ def get_wxa_code(request): |
||
47 | 56 |
def get_wxa_code_scene(request): |
48 | 57 |
sid = request.POST.get('sid', '') |
49 | 58 |
|
59 |
+ scene = get_wxa_code_scene_(sid) |
|
60 |
+ |
|
61 |
+ if scene: |
|
62 |
+ return response(data={ |
|
63 |
+ 'scene': scene, |
|
64 |
+ }) |
|
65 |
+ |
|
50 | 66 |
try: |
51 | 67 |
scene = SceneInfo.objects.get(sid=sid, status=True) |
52 | 68 |
except SceneInfo.DoesNotExist: |
@@ -205,6 +205,7 @@ REDIS = { |
||
205 | 205 |
'USER': '', |
206 | 206 |
'PASSWORD': '', |
207 | 207 |
'db': 0, |
208 |
+ 'decode_responses': True, |
|
208 | 209 |
} |
209 | 210 |
} |
210 | 211 |
|
@@ -22,5 +22,8 @@ MEMBER_SEND_COUPON_LIST = 'kodo:member:send:coupon:list' |
||
22 | 22 |
MEMBER_SEND_COUPON_LIST2 = 'kodo:member:send:coupon:list2' |
23 | 23 |
MEMBER_UPGRADE_INFO = 'kodo:member:upgrade:info:%s:%s' # brand_id, user_id |
24 | 24 |
|
25 |
+WXA_CODE_SCENE_PAGE_QINIUURL_MAPPING = 'kodo:wxa:code:scene:page:mapping' # HASH, {scene+page: qiniu_url} |
|
26 |
+WXA_CODE_SID_SCENE_MAPPING = 'kodo:wxa:code:scene:mapping' # HASH, {sid: scene} |
|
27 |
+ |
|
25 | 28 |
# 七牛 |
26 | 29 |
QINIU_UPLOAD_LIST = 'kodo:qiniu:upload:list' |
@@ -0,0 +1,19 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
3 |
+from utils.redis.connect import r |
|
4 |
+from utils.redis.rkeys import WXA_CODE_SCENE_PAGE_QINIUURL_MAPPING, WXA_CODE_SID_SCENE_MAPPING |
|
5 |
+ |
|
6 |
+ |
|
7 |
+def set_wxa_code_info(scene, page, qiniu_url, sid): |
|
8 |
+ p = r.pipeline() |
|
9 |
+ p.hset(WXA_CODE_SCENE_PAGE_QINIUURL_MAPPING, '{0}:{1}'.format(scene, page), qiniu_url) |
|
10 |
+ p.hset(WXA_CODE_SID_SCENE_MAPPING, sid, scene) |
|
11 |
+ p.execute() |
|
12 |
+ |
|
13 |
+ |
|
14 |
+def get_wxa_code_qiniu_url(scene, page): |
|
15 |
+ return r.hget(WXA_CODE_SCENE_PAGE_QINIUURL_MAPPING, '{0}:{1}'.format(scene, page)) |
|
16 |
+ |
|
17 |
+ |
|
18 |
+def get_wxa_code_scene_(sid): |
|
19 |
+ return r.hget(WXA_CODE_SID_SCENE_MAPPING, sid) |