@@ -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) |