models.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # coding=utf-8
  2. import time
  3. import os
  4. from django.conf import settings
  5. from django.db import models
  6. from django.utils import timezone
  7. from util.wx.wechat import WeChat
  8. from util.exceptions import CustomError
  9. class WechatApplet(models.Model):
  10. authorizer_appid = models.CharField(max_length=512, verbose_name=u'小程序appid')
  11. secret = models.CharField(max_length=512, verbose_name=u'小程序秘钥', null=True)
  12. authorizer_refresh_token = models.CharField(max_length=512, verbose_name=u'刷新令牌', null=True)
  13. authorizer_access_token = models.CharField(max_length=512, verbose_name=u'令牌', null=True)
  14. access_token_gtime = models.DateTimeField(verbose_name=u"获取令牌时间", null=True)
  15. expires_in = models.IntegerField(verbose_name=u'令牌有效期', null=True)
  16. agent_num = models.CharField(max_length=512, verbose_name=u'商户号', default="")
  17. agent_key = models.CharField(max_length=512, verbose_name=u'商户密钥', default="")
  18. class Meta:
  19. db_table = "wechat_applet"
  20. ordering = ['-id']
  21. index_together = ()
  22. verbose_name = u"小程序"
  23. default_permissions = ()
  24. permissions = []
  25. @staticmethod
  26. def getByAppid(appid):
  27. instance = WechatApplet.objects.filter(authorizer_appid=appid).first()
  28. if not instance:
  29. raise CustomError(u'未找到相应的小程序!')
  30. return instance
  31. def getAccessToken(self):
  32. if self.authorizer_access_token:
  33. last_time = time.mktime(self.access_token_gtime.timetuple()) + self.expires_in
  34. now = time.mktime(timezone.now().timetuple())
  35. if last_time > now:
  36. return self.authorizer_access_token
  37. gtime = timezone.now()
  38. res = WeChat.getAccessToken(self.authorizer_appid, self.secret)
  39. self.refreshAccessToken(gtime, res['access_token'], res['expires_in'])
  40. return self.authorizer_access_token
  41. def refreshAccessToken(self, gtime, access_token, expires_in, refresh_token=''):
  42. self.authorizer_access_token = access_token
  43. self.access_token_gtime = gtime
  44. self.expires_in = expires_in
  45. self.authorizer_refresh_token = refresh_token
  46. self.save()
  47. def generateActivityCode(self, customer_id, activity_id):
  48. filename = "{}{}_{}.png".format("activiytCode/", activity_id, customer_id)
  49. full_filename = "{}/{}".format(settings.MEDIA_ROOT, filename)
  50. if os.path.exists(full_filename):
  51. return filename
  52. page = 'pages/index/index'
  53. filename = WeChat.getActivityCode(self.getAccessToken(), page, customer_id, activity_id)
  54. return filename
  55. def generateActivityWXappCode(self, activity_id):
  56. filename = "{}_{}.png".format("activiytCode/", activity_id)
  57. full_filename = "{}/{}".format(settings.MEDIA_ROOT, filename)
  58. if os.path.exists(full_filename):
  59. return filename
  60. page = 'pages/index/index'
  61. filename = WeChat.getActivityWXappCode(self.getAccessToken(), page, activity_id)
  62. return filename