|
# -*- 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)
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,
})
|