|  | # -*- coding: utf-8 -*-
from django.conf import settings
from django_response import response
from pywe_storage import RedisStorage
from pywe_wxa_qrcode import get_wxa_code_unlimit
from miniapp.models import SceneInfo
from utils.qiniucdn import qiniu_file_url, upload
from utils.redis.connect import r
from utils.redis.rwxacode import get_wxa_code_qiniu_url, get_wxa_code_scene_, set_wxa_code_info
WECHAT = settings.WECHAT
def __get_wxa_code(scene, page):
    qiniu_url = get_wxa_code_qiniu_url(scene, page)
    if qiniu_url:
        return qiniu_url
    si, created = SceneInfo.objects.get_or_create(scene=scene, page=page, status=True)
    qiniu_url = si.qiniu_url
    if not qiniu_url:
        wxcfg = WECHAT.get('MINIAPP', {})
        appid = wxcfg.get('appID')
        secret = wxcfg.get('appsecret')
        res = get_wxa_code_unlimit(si.sid, page, res_to_base64=False, appid=appid, secret=secret, storage=RedisStorage(r))
        if res.headers and res.headers.get('Content-disposition'):
            qiniu_url = qiniu_file_url(upload(res.content))
        else:
            qiniu_url = ''
        si.qiniu_url = qiniu_url
        si.save()
    set_wxa_code_info(scene, page, qiniu_url, si.sid)
    return qiniu_url
# Support API Cache
def get_wxa_code(request):
    scene = request.POST.get('scene', '')
    page = request.POST.get('page', '')
    qiniu_url = __get_wxa_code(scene, page)
    if not settings.QINIU_FILE_URL_HTTPS:
        qiniu_url = qiniu_url.replace(settings.QINIU_FILE_URL_BEFORE, settings.QINIU_FILE_URL_AFTER).replace(settings.QINIU_FILE_URL_BEFORE2, settings.QINIU_FILE_URL_AFTER)
    return response(data={
        'qiniu_url': qiniu_url,
    })
def get_wxa_code_scene(request):
    sid = request.POST.get('sid', '')
    scene = get_wxa_code_scene_(sid)
    if scene:
        return response(data={
            'scene': scene,
        })
    try:
        scene = SceneInfo.objects.get(sid=sid, status=True)
    except SceneInfo.DoesNotExist:
        return response()
    return response(data={
        'scene': scene.scene,
    })
 |