No Description

wxa_views.py 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # -*- coding: utf-8 -*-
  2. from django.conf import settings
  3. from django_response import response
  4. from pywe_storage import RedisStorage
  5. from pywe_wxa_qrcode import get_wxa_code_unlimit
  6. from miniapp.models import SceneInfo
  7. from utils.qiniucdn import qiniu_file_url, upload
  8. from utils.redis.connect import r
  9. from utils.redis.rwxacode import get_wxa_code_qiniu_url, get_wxa_code_scene_, set_wxa_code_info
  10. WECHAT = settings.WECHAT
  11. def __get_wxa_code(scene, page):
  12. qiniu_url = get_wxa_code_qiniu_url(scene, page)
  13. if qiniu_url:
  14. return qiniu_url
  15. si, created = SceneInfo.objects.get_or_create(scene=scene, page=page, status=True)
  16. qiniu_url = si.qiniu_url
  17. if not qiniu_url:
  18. wxcfg = WECHAT.get('MINIAPP', {})
  19. appid = wxcfg.get('appID')
  20. secret = wxcfg.get('appsecret')
  21. res = get_wxa_code_unlimit(si.sid, page, res_to_base64=False, appid=appid, secret=secret, storage=RedisStorage(r))
  22. if res.headers and res.headers.get('Content-disposition'):
  23. qiniu_url = qiniu_file_url(upload(res.content))
  24. else:
  25. qiniu_url = ''
  26. si.qiniu_url = qiniu_url
  27. si.save()
  28. set_wxa_code_info(scene, page, qiniu_url, si.sid)
  29. return qiniu_url
  30. # Support API Cache
  31. def get_wxa_code(request):
  32. scene = request.POST.get('scene', '')
  33. page = request.POST.get('page', '')
  34. qiniu_url = __get_wxa_code(scene, page)
  35. if not settings.QINIU_FILE_URL_HTTPS:
  36. 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)
  37. return response(data={
  38. 'qiniu_url': qiniu_url,
  39. })
  40. def get_wxa_code_scene(request):
  41. sid = request.POST.get('sid', '')
  42. scene = get_wxa_code_scene_(sid)
  43. if scene:
  44. return response(data={
  45. 'scene': scene,
  46. })
  47. try:
  48. scene = SceneInfo.objects.get(sid=sid, status=True)
  49. except SceneInfo.DoesNotExist:
  50. return response()
  51. return response(data={
  52. 'scene': scene.scene,
  53. })