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